McSheep - View of -[12][13]-DsParser[5]-353-358-DsParser[1]-370-370-DsParser[4]-442-454-DsParser[3101438351


DsParser DsParser DsParser DsParser DsParser DsParser DsParser DsParser DsParser CommonIronJacamarParser ResourceAdapterParser ResourceAdapterParser
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
 811.            while (reader.hasNext()) {
 812.                switch (reader.nextTag()) {
 813.                    case END_ELEMENT: {
 814.                        if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY) {
 815.    
 816.                            return;
 817.                        } else {
 818.                            if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN) {
 819.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 820.                            }
 821.                        }
 822.                        break;
 823.                    }
 824.                    case START_ELEMENT: {
 825.                        switch (Capacity.Tag.forName(reader.getLocalName())) {
 826.                            case INCREMENTER: {
 827.                                parseExtension(reader, reader.getLocalName(), operation, CAPACITY_INCREM...
 828.                                break;
 829.                            }
 830.                            case DECREMENTER: {
 831.                                parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DECREM...
 832.                                break;
 833.                            }
 834.    
 835.                            default:
 836.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 837.                        }
 838.                        break;
 839.                    }
 840.                }
 841.            }
 842.            throw new ParserException(bundle.unexpectedEndOfDocument());
 126.            while (reader.hasNext()) {
 127.                switch (reader.nextTag()) {
 128.                    case END_ELEMENT: {
 129.                        if (Tag.forName(reader.getLocalName()) == Tag.RESOURCE_ADAPTERS) {
 130.                            return;
 131.                        } else {
 132.                            if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.UNKNOW...
 133.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 134.                            }
 135.                        }
 136.                        break;
 137.                    }
 138.                    case START_ELEMENT: {
 139.                        switch (Activations.Tag.forName(reader.getLocalName())) {
 140.                            case RESOURCE_ADAPTER: {
 141.                                parseResourceAdapter(reader, list, parentAddress);
 142.                                break;
 143.                            }
 144.                            default:
 145.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 146.                        }
 147.                        break;
 148.                    }
 149.                }
 150.            }
 151.            throw new ParserException(bundle.unexpectedEndOfDocument());
 193.            while (reader.hasNext()) {
 194.                switch (reader.nextTag()) {
 195.                    case END_ELEMENT: {
 196.                        if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.RESOURCE_A...
 197.                            if (!archiveOrModuleMatched) {
 198.                                throw new ParserException(bundle.requiredElementMissing(ARCHIVE.getName(...
 199.    
 200.                            }
 201.    
 202.                            if (id != null) {
 203.                                raAddress.add(RESOURCEADAPTER_NAME, id);
 204.                            } else {
 205.                                raAddress.add(RESOURCEADAPTER_NAME, archiveOrModuleName);
 206.                            }
 207.    
 208.                            raAddress.protect();
 209.    
 210.                            operation.get(OP_ADDR).set(raAddress);
 211.                            list.add(operation);
 212.    
 213.                            for (Map.Entry<String, ModelNode> entry : configPropertiesOperations.entrySe...
 214.                                final ModelNode env = raAddress.clone();
 215.                                env.add(CONFIG_PROPERTIES.getName(), entry.getKey());
 216.                                env.protect();
 217.    
 218.                                entry.getValue().get(OP_ADDR).set(env);
 219.                                list.add(entry.getValue());
 220.                            }
 221.    
 222.                            for (Map.Entry<String, ModelNode> entry : connectionDefinitionsOperations.en...
 223.                                final ModelNode env = raAddress.clone();
 224.                                env.add(CONNECTIONDEFINITIONS_NAME, entry.getKey());
 225.                                env.protect();
 226.    
 227.                                entry.getValue().get(OP_ADDR).set(env);
 228.                                list.add(entry.getValue());
 229.    
 230.                                final HashMap<String, ModelNode> properties = cfConfigPropertiesOperatio...
 231.                                if (properties != null) {
 232.                                    for (Map.Entry<String, ModelNode> configEntry : properties.entrySet(...
 233.                                        final ModelNode configEnv = env.clone();
 234.                                        configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())...
 235.                                        configEnv.protect();
 236.    
 237.                                        configEntry.getValue().get(OP_ADDR).set(configEnv);
 238.                                        list.add(configEntry.getValue());
 239.                                    }
 240.                                }
 241.                            }
 242.    
 243.                            for (Map.Entry<String, ModelNode> entry : adminObjectsOperations.entrySet())...
 244.                                final ModelNode env = raAddress.clone();
 245.                                env.add(ADMIN_OBJECTS_NAME, entry.getKey());
 246.                                env.protect();
 247.    
 248.                                entry.getValue().get(OP_ADDR).set(env);
 249.                                list.add(entry.getValue());
 250.    
 251.                                final HashMap<String, ModelNode> aoProperties = aoConfigPropertiesOperat...
 252.                                if (aoProperties != null) {
 253.                                    for (Map.Entry<String, ModelNode> configEntry : aoProperties.entrySe...
 254.                                        final ModelNode configEnv = env.clone();
 255.                                        configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())...
 256.                                        configEnv.protect();
 257.    
 258.                                        configEntry.getValue().get(OP_ADDR).set(configEnv);
 259.                                        list.add(configEntry.getValue());
 260.                                    }
 261.                                }
 262.                            }
 263.    
 264.    
 265.                            return;
 266.    
 267.                        } else {
 268.                            if (AS7ResourceAdapterTags.forName(reader.getLocalName()) == AS7ResourceAdap...
 269.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 270.                            }
 271.                        }
 272.                        break;
 273.                    }
 274.                    case START_ELEMENT: {
 275.                        switch (AS7ResourceAdapterTags.forName(reader.getLocalName())) {
 276.                            case ADMIN_OBJECTS:
 277.                            case CONNECTION_DEFINITIONS:
 278.                            case BEAN_VALIDATION_GROUPS: {
 279.                                //ignore it,we will parse bean-validation-group,admin_object and connect...
 280.                                break;
 281.                            }
 282.                            case ADMIN_OBJECT: {
 283.                                parseAdminObjects(reader, adminObjectsOperations, aoConfigPropertiesOper...
 284.                                break;
 285.                            }
 286.    
 287.                            case CONNECTION_DEFINITION: {
 288.                                switch (org.jboss.as.connector.subsystems.resourceadapters.Namespace.for...
 289.                                    case RESOURCEADAPTERS_1_0:
 290.                                    case RESOURCEADAPTERS_1_1:
 291.                                    case RESOURCEADAPTERS_2_0:
 292.                                        parseConnectionDefinitions_1_0(reader, connectionDefinitionsOper...
 293.                                        break;
 294.                                    case RESOURCEADAPTERS_3_0:
 295.                                        parseConnectionDefinitions_3_0(reader, connectionDefinitionsOper...
 296.                                        break;
 297.                                }
 298.                                break;
 299.                            }
 300.                            case BEAN_VALIDATION_GROUP: {
 301.                                String value = rawElementText(reader);
 302.                                operation.get(BEANVALIDATION_GROUPS.getName()).add(BEANVALIDATIONGROUP.p...
 303.                                break;
 304.                            }
 305.                            case BOOTSTRAP_CONTEXT: {
 306.                                String value = rawElementText(reader);
 307.                                BOOTSTRAP_CONTEXT.parseAndSetParameter(value, operation, reader);
 308.                                break;
 309.                            }
 310.                            case CONFIG_PROPERTY: {
 311.                                parseConfigProperties(reader, configPropertiesOperations);
 312.                                break;
 313.    
 314.                            }
 315.                            case TRANSACTION_SUPPORT: {
 316.                                if (txSupportMatched) {
 317.                                    throw new ParserException(bundle.unexpectedElement(TRANSACTION_SUPPO...
 318.                                }
 319.                                String value = rawElementText(reader);
 320.                                TRANSACTION_SUPPORT.parseAndSetParameter(value, operation, reader);
 321.                                isXa = value != null && TransactionSupportEnum.valueOf(value) == Transac...
 322.                                txSupportMatched = true;
 323.                                break;
 324.                            }
 325.                            case WORKMANAGER: {
 326.                                parseWorkManager(operation, reader);
 327.                                break;
 328.                            }
 329.                            case ARCHIVE: {
 330.                                if (archiveOrModuleMatched) {
 331.                                    throw new ParserException(bundle.unexpectedElement(ARCHIVE.getXmlNam...
 332.                                }
 333.                                archiveOrModuleName = rawElementText(reader);
 334.                                ARCHIVE.parseAndSetParameter(archiveOrModuleName, operation, reader);
 335.                                archiveOrModuleMatched = true;
 336.                                break;
 337.                            }
 338.                            case MODULE: {
 339.                                if (archiveOrModuleMatched) {
 340.                                    throw new ParserException(bundle.unexpectedElement(MODULE.getXmlName...
 341.                                }
 342.    
 343.                                String moduleId = rawAttributeText(reader, "id");
 344.                                String moduleSlot = rawAttributeText(reader, "slot", "main");
 345.                                archiveOrModuleName = moduleId + ":" + moduleSlot;
 346.                                MODULE.parseAndSetParameter(archiveOrModuleName, operation, reader);
 347.    
 348.                                archiveOrModuleMatched = true;
 349.                                break;
 350.                            }
 351.                            default:
 352.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 353.                        }
 354.                        break;
 355.                    }
 356.                }
 357.            }
 358.    
 359.            throw new ParserException(bundle.unexpectedEndOfDocument());
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.datasources;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY;
  42.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOCATION_RETRY_WAIT_MILLIS;
  43.    import static org.jboss.as.connector.subsystems.datasources.Constants.ALLOW_MULTIPLE_USERS;
  44.    import static org.jboss.as.connector.subsystems.datasources.Constants.CHECK_VALID_CONNECTION_SQL;
  45.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTABLE;
  46.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_CLASS;
  47.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_LISTENER_PROPERTIES...
  48.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTIES;
  49.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_PROPERTY_VALUE;
  50.    import static org.jboss.as.connector.subsystems.datasources.Constants.CONNECTION_URL;
  51.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_CLASS;
  52.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATASOURCE_DRIVER;
  53.    import static org.jboss.as.connector.subsystems.datasources.Constants.DATA_SOURCE;
  54.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS;
  55.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_CLASS_NAME;
  56.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_DATASOURCE_CLASS_NAME;
  57.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MAJOR_VERSION;
  58.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MINOR_VERSION;
  59.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_MODULE_NAME;
  60.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_NAME;
  61.    import static org.jboss.as.connector.subsystems.datasources.Constants.DRIVER_XA_DATASOURCE_CLASS_NAM...
  62.    import static org.jboss.as.connector.subsystems.datasources.Constants.ENABLED;
  63.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_CLASSNAME;
  64.    import static org.jboss.as.connector.subsystems.datasources.Constants.EXCEPTION_SORTER_PROPERTIES;
  65.    import static org.jboss.as.connector.subsystems.datasources.Constants.INTERLEAVING;
  66.    import static org.jboss.as.connector.subsystems.datasources.Constants.JDBC_DRIVER_NAME;
  67.    import static org.jboss.as.connector.subsystems.datasources.Constants.JNDI_NAME;
  68.    import static org.jboss.as.connector.subsystems.datasources.Constants.JTA;
  69.    import static org.jboss.as.connector.subsystems.datasources.Constants.MODULE_SLOT;
  70.    import static org.jboss.as.connector.subsystems.datasources.Constants.NEW_CONNECTION_SQL;
  71.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_RECOVERY;
  72.    import static org.jboss.as.connector.subsystems.datasources.Constants.NO_TX_SEPARATE_POOL;
  73.    import static org.jboss.as.connector.subsystems.datasources.Constants.PAD_XID;
  74.    import static org.jboss.as.connector.subsystems.datasources.Constants.PASSWORD;
  75.    import static org.jboss.as.connector.subsystems.datasources.Constants.POOLNAME_NAME;
  76.    import static org.jboss.as.connector.subsystems.datasources.Constants.PREPARED_STATEMENTS_CACHE_SIZE...
  77.    import static org.jboss.as.connector.subsystems.datasources.Constants.QUERY_TIMEOUT;
  78.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTHPLUGIN_PROPERTIES;
  79.    import static org.jboss.as.connector.subsystems.datasources.Constants.REAUTH_PLUGIN_CLASSNAME;
  80.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_PASSWORD;
  81.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_SECURITY_DOMAIN;
  82.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVERY_USERNAME;
  83.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_CLASSNAME;
  84.    import static org.jboss.as.connector.subsystems.datasources.Constants.RECOVER_PLUGIN_PROPERTIES;
  85.    import static org.jboss.as.connector.subsystems.datasources.Constants.SAME_RM_OVERRIDE;
  86.    import static org.jboss.as.connector.subsystems.datasources.Constants.SECURITY_DOMAIN;
  87.    import static org.jboss.as.connector.subsystems.datasources.Constants.SET_TX_QUERY_TIMEOUT;
  88.    import static org.jboss.as.connector.subsystems.datasources.Constants.SHARE_PREPARED_STATEMENTS;
  89.    import static org.jboss.as.connector.subsystems.datasources.Constants.SPY;
  90.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_CLASS...
  91.    import static org.jboss.as.connector.subsystems.datasources.Constants.STALE_CONNECTION_CHECKER_PROPE...
  92.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACKING;
  93.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRACK_STATEMENTS;
  94.    import static org.jboss.as.connector.subsystems.datasources.Constants.TRANSACTION_ISOLATION;
  95.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_DELIMITER;
  96.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_PROPERTY;
  97.    import static org.jboss.as.connector.subsystems.datasources.Constants.URL_SELECTOR_STRATEGY_CLASS_NA...
  98.    import static org.jboss.as.connector.subsystems.datasources.Constants.USERNAME;
  99.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_CCM;
 100.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_JAVA_CONTEXT;
 101.    import static org.jboss.as.connector.subsystems.datasources.Constants.USE_TRY_LOCK;
 102.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALIDATE_ON_MATCH;
 103.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_CLASS...
 104.    import static org.jboss.as.connector.subsystems.datasources.Constants.VALID_CONNECTION_CHECKER_PROPE...
 105.    import static org.jboss.as.connector.subsystems.datasources.Constants.WRAP_XA_RESOURCE;
 106.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTIES;
 107.    import static org.jboss.as.connector.subsystems.datasources.Constants.XADATASOURCE_PROPERTY_VALUE;
 108.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE;
 109.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_DATASOURCE_CLASS;
 110.    import static org.jboss.as.connector.subsystems.datasources.Constants.XA_RESOURCE_TIMEOUT;
 111.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
 112.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ENABLE;
 113.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
 114.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
 115.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.PERSISTENT;
 116.    import static org.jboss.as.controller.parsing.ParseUtils.isNoNamespaceAttribute;
 117.    import static org.jboss.as.controller.parsing.ParseUtils.unexpectedAttribute;
 118.    
 119.    import java.util.ArrayList;
 120.    import java.util.HashMap;
 121.    import java.util.List;
 122.    import java.util.Map;
 123.    
 124.    import javax.xml.stream.XMLStreamException;
 125.    
 126.    import org.jboss.as.connector.util.AbstractParser;
 127.    import org.jboss.as.connector.util.ParserException;
 128.    import org.jboss.as.controller.parsing.ParseUtils;
 129.    import org.jboss.dmr.ModelNode;
 130.    import org.jboss.jca.common.CommonBundle;
 131.    import org.jboss.jca.common.api.metadata.Defaults;
 132.    import org.jboss.jca.common.api.metadata.common.Capacity;
 133.    import org.jboss.jca.common.api.metadata.common.Credential;
 134.    import org.jboss.jca.common.api.metadata.common.Recovery;
 135.    import org.jboss.jca.common.api.metadata.ds.DataSource;
 136.    import org.jboss.jca.common.api.metadata.ds.DataSources;
 137.    import org.jboss.jca.common.api.metadata.ds.Driver;
 138.    import org.jboss.jca.common.api.metadata.ds.DsPool;
 139.    import org.jboss.jca.common.api.metadata.ds.DsSecurity;
 140.    import org.jboss.jca.common.api.metadata.ds.DsXaPool;
 141.    import org.jboss.jca.common.api.metadata.ds.Statement;
 142.    import org.jboss.jca.common.api.metadata.ds.TimeOut;
 143.    import org.jboss.jca.common.api.metadata.ds.Validation;
 144.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
 145.    import org.jboss.jca.common.api.validator.ValidateException;
 146.    import org.jboss.logging.Messages;
 147.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 148.    
 149.    /**
 150.     * A DsParser.
 151.     *
 152.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 153.     */
 154.    public class DsParser extends AbstractParser {
 155.        /**
 156.         * The bundle
 157.         */
 158.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 159.    
 160.    
 161.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
 162.    
 163.            DataSources dataSources = null;
 164.    
 165.            //iterate over tags
 166.            int iterate;
 167.            try {
 168.                iterate = reader.nextTag();
 169.            } catch (XMLStreamException e) {
 170.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
 171.                iterate = reader.nextTag();
 172.            }
 173.            switch (iterate) {
 174.                case END_ELEMENT: {
 175.                    // should mean we're done, so ignore it.
 176.                    break;
 177.                }
 178.                case START_ELEMENT: {
 179.    
 180.                    switch (Tag.forName(reader.getLocalName())) {
 181.                        case DATASOURCES: {
 182.                            parseDataSources(reader, list, parentAddress);
 183.                            break;
 184.                        }
 185.                        default:
 186.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 187.                    }
 188.    
 189.                    break;
 190.                }
 191.                default:
 192.                    throw new IllegalStateException();
 193.            }
 194.    
 195.    
 196.        }
 197.    
 198.        private void parseDataSources(final XMLExtendedStreamReader reader, final List<ModelNode> list, ...
 199.                ValidateException {
 200.            boolean driversMatched = false;
 201.            while (reader.hasNext()) {
 202.                switch (reader.nextTag()) {
 203.                    case END_ELEMENT: {
 204.                        if (Tag.forName(reader.getLocalName()) == Tag.DATASOURCES)
 205.                            // should mean we're done, so ignore it.
 206.                            return;
 207.                    }
 208.                    case START_ELEMENT: {
 209.                        switch (DataSources.Tag.forName(reader.getLocalName())) {
 210.                            case DATASOURCE: {
 211.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 212.                                    case DATASOURCES_1_0:
 213.                                    case DATASOURCES_1_1:
 214.                                    case DATASOURCES_2_0:
 215.                                        parseDataSource_1_0(reader, list, parentAddress);
 216.                                        break;
 217.                                    case DATASOURCES_1_2:
 218.                                        parseDataSource_1_2(reader, list, parentAddress);
 219.                                        break;
 220.                                    case DATASOURCES_3_0:
 221.                                        parseDataSource_3_0(reader, list, parentAddress);
 222.                                        break;
 223.                                }
 224.                                break;
 225.                            }
 226.                            case XA_DATASOURCE: {
 227.                                switch (Namespace.forUri(reader.getNamespaceURI())) {
 228.                                    case DATASOURCES_1_0:
 229.                                    case DATASOURCES_1_1:
 230.                                    case DATASOURCES_2_0:
 231.                                        parseXADataSource_1_0(reader, list, parentAddress);
 232.                                        break;
 233.                                    case DATASOURCES_1_2:
 234.                                        parseXADataSource_1_2(reader, list, parentAddress);
 235.                                        break;
 236.                                    case DATASOURCES_3_0:
 237.                                        parseXADataSource_3_0(reader, list, parentAddress);
 238.                                        break;
 239.                                }
 240.                                break;
 241.    
 242.                            }
 243.                            case DRIVERS: {
 244.                                driversMatched = true;
 245.                                break;
 246.                            }
 247.                            case DRIVER: {
 248.                                parseDriver(reader, list, parentAddress);
 249.                                break;
 250.                            }
 251.                            default:
 252.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 253.                        }
 254.                        break;
 255.                    }
 256.                }
 257.            }
 258.            throw new ParserException(bundle.unexpectedEndOfDocument());
 259.        }
 260.    
 261.        private void parseDataSource_1_2(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
 262.                ValidateException {
 263.    
 264.            String poolName = null;
 265.            final ModelNode operation = new ModelNode();
 266.            operation.get(OP).set(ADD);
 267.            boolean enabled = Defaults.ENABLED.booleanValue();
 268.            // Persist the enabled flag because xml default is != from DMR default
 269.            boolean persistEnabled = true;
 270.            final int count = reader.getAttributeCount();
 271.            for (int i = 0; i < count; i++) {
 272.    
 273.                if (!isNoNamespaceAttribute(reader, i)) {
 274.                    throw unexpectedAttribute(reader, i);
 275.                }
 276.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
 277.                switch (attribute) {
 278.                    case ENABLED: {
 279.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 280.                        if (value != null) {
 281.                            enabled = Boolean.parseBoolean(value);
 282.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 283.                            persistEnabled = true;
 284.                        }
 285.                        break;
 286.                    }
 287.                    case JNDI_NAME: {
 288.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 289.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 290.                        break;
 291.                    }
 292.                    case POOL_NAME: {
 293.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 294.                        break;
 295.                    }
 296.                    case USE_JAVA_CONTEXT: {
 297.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 298.                        if (value != null) {
 299.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 300.                        }
 301.                        break;
 302.                    }
 303.                    case SPY: {
 304.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 305.                        if (value != null) {
 306.                            SPY.parseAndSetParameter(value, operation, reader);
 307.                        }
 308.                        break;
 309.                    }
 310.                    case USE_CCM: {
 311.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 312.                        if (value != null) {
 313.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 314.                        }
 315.                        break;
 316.                    }
 317.                    case JTA: {
 318.                        final String value = rawAttributeText(reader, JTA.getXmlName());
 319.                        if (value != null) {
 320.                            JTA.parseAndSetParameter(value, operation, reader);
 321.                        }
 322.                        break;
 323.                    }
 324.                    case CONNECTABLE: {
 325.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 326.                        if (value != null) {
 327.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 328.                        }
 329.                        break;
 330.                    }
 331.                    default:
 332.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 333.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 334.                            if (value != null) {
 335.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 336.                            }
 337.                            break;
 338.    
 339.                        } else {
 340.                            throw ParseUtils.unexpectedAttribute(reader, i);
 341.                        }
 342.                }
 343.            }
 344.            final ModelNode dsAddress = parentAddress.clone();
 345.            dsAddress.add(DATA_SOURCE, poolName);
 346.            dsAddress.protect();
 347.    
 348.            operation.get(OP_ADDR).set(dsAddress);
 349.    
 350.    
 351.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
 352.            //elements reading
 353.            while (reader.hasNext()) {
 354.                switch (reader.nextTag()) {
 355.                    case END_ELEMENT: {
 356.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
 357.    
 358.                            list.add(operation);
 359.                            list.addAll(configPropertiesOperations);
 360.                            if (enabled) {
 361.                                final ModelNode enableOperation = new ModelNode();
 362.                                enableOperation.get(OP).set(ENABLE);
 363.                                enableOperation.get(OP_ADDR).set(dsAddress);
 364.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 365.                                list.add(enableOperation);
 366.                            }
 367.                            return;
 368.                        } else {
 369.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
 370.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 371.                            }
 372.                        }
 373.                        break;
 374.                    }
 375.                    case START_ELEMENT: {
 376.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
 377.                            case CONNECTION_PROPERTY: {
 378.                                String name = rawAttributeText(reader, "name");
 379.                                String value = rawElementText(reader);
 380.    
 381.                                final ModelNode configOperation = new ModelNode();
 382.                                configOperation.get(OP).set(ADD);
 383.    
 384.                                final ModelNode configAddress = dsAddress.clone();
 385.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
 386.                                configAddress.protect();
 387.    
 388.                                configOperation.get(OP_ADDR).set(configAddress);
 389.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
 390.                                configPropertiesOperations.add(configOperation);
 391.                                break;
 392.                            }
 393.                            case CONNECTION_URL: {
 394.                                String value = rawElementText(reader);
 395.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
 396.                                break;
 397.                            }
 398.                            case DRIVER_CLASS: {
 399.                                String value = rawElementText(reader);
 400.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
 401.                                break;
 402.                            }
 403.                            case DATASOURCE_CLASS: {
 404.                                String value = rawElementText(reader);
 405.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 406.                                break;
 407.                            }
 408.                            case DRIVER: {
 409.                                String value = rawElementText(reader);
 410.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 411.                                break;
 412.                            }
 413.                            case POOL: {
 414.                                parsePool(reader, operation);
 415.                                break;
 416.                            }
 417.                            case NEW_CONNECTION_SQL: {
 418.                                String value = rawElementText(reader);
 419.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 420.                                break;
 421.                            }
 422.                            case URL_DELIMITER: {
 423.                                String value = rawElementText(reader);
 424.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 425.                                break;
 426.                            }
 427.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 428.                                String value = rawElementText(reader);
 429.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 430.                                break;
 431.                            }
 432.                            case TRANSACTION_ISOLATION: {
 433.                                String value = rawElementText(reader);
 434.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case SECURITY: {
 438.                                parseDsSecurity(reader, operation);
 439.                                break;
 440.                            }
 441.                            case STATEMENT: {
 442.                                parseStatementSettings(reader, operation);
 443.                                break;
 444.                            }
 445.                            case TIMEOUT: {
 446.                                parseTimeOutSettings(reader, operation);
 447.                                break;
 448.                            }
 449.                            case VALIDATION: {
 450.                                parseValidationSetting(reader, operation);
 451.                                break;
 452.                            }
 453.                            default:
 454.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 455.                        }
 456.                        break;
 457.                    }
 458.                }
 459.            }
 460.            throw new ParserException(bundle.unexpectedEndOfDocument());
 461.        }
 462.    
 463.        private void parseXADataSource_1_2(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 464.                ValidateException {
 465.    
 466.            String poolName = null;
 467.            final ModelNode operation = new ModelNode();
 468.            operation.get(OP).set(ADD);
 469.            boolean enabled = Defaults.ENABLED.booleanValue();
 470.            // Persist the enabled flag because xml default is != from DMR default
 471.            boolean persistEnabled = true;
 472.    
 473.            final int count = reader.getAttributeCount();
 474.            for (int i = 0; i < count; i++) {
 475.                if (!isNoNamespaceAttribute(reader, i)) {
 476.                    throw unexpectedAttribute(reader, i);
 477.                }
 478.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 479.                switch (attribute) {
 480.                    case ENABLED: {
 481.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 482.                        if (value != null) {
 483.                            enabled = Boolean.parseBoolean(value);
 484.                            //ENABLED.parseAndSetParameter(value, operation, reader);
 485.                            persistEnabled = true;
 486.                        }
 487.                        break;
 488.                    }
 489.                    case JNDI_NAME: {
 490.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 491.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 492.                        break;
 493.                    }
 494.                    case POOL_NAME: {
 495.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 496.                        break;
 497.                    }
 498.                    case USE_JAVA_CONTEXT: {
 499.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 500.                        if (value != null) {
 501.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 502.                        }
 503.                        break;
 504.                    }
 505.                    case SPY: {
 506.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 507.                        if (value != null) {
 508.                            SPY.parseAndSetParameter(value, operation, reader);
 509.                        }
 510.                        break;
 511.                    }
 512.                    case USE_CCM: {
 513.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 514.                        if (value != null) {
 515.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 516.                        }
 517.                        break;
 518.                    }
 519.                    default:
 520.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 521.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 522.                            if (value != null) {
 523.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 524.                            }
 525.                            break;
 526.    
 527.                        } else {
 528.                            throw ParseUtils.unexpectedAttribute(reader, i);
 529.                        }
 530.                }
 531.            }
 532.    
 533.    
 534.            final ModelNode dsAddress = parentAddress.clone();
 535.            dsAddress.add(XA_DATASOURCE, poolName);
 536.            dsAddress.protect();
 537.    
 538.            operation.get(OP_ADDR).set(dsAddress);
 539.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 540.    
 541.            //elements reading
 542.            while (reader.hasNext()) {
 543.                switch (reader.nextTag()) {
 544.                    case END_ELEMENT: {
 545.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 546.    
 547.                            list.add(operation);
 548.                            list.addAll(xadatasourcePropertiesOperations);
 549.                            if (enabled) {
 550.                                final ModelNode enableOperation = new ModelNode();
 551.                                enableOperation.get(OP).set(ENABLE);
 552.                                enableOperation.get(OP_ADDR).set(dsAddress);
 553.                                enableOperation.get(PERSISTENT).set(persistEnabled);
 554.                                list.add(enableOperation);
 555.                            }
 556.                            return;
 557.                        } else {
 558.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 559.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 560.                            }
 561.                        }
 562.                        break;
 563.                    }
 564.                    case START_ELEMENT: {
 565.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 566.                            case XA_DATASOURCE_PROPERTY: {
 567.                                String name = rawAttributeText(reader, "name");
 568.                                String value = rawElementText(reader);
 569.    
 570.                                final ModelNode configOperation = new ModelNode();
 571.                                configOperation.get(OP).set(ADD);
 572.    
 573.                                final ModelNode configAddress = dsAddress.clone();
 574.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 575.                                configAddress.protect();
 576.    
 577.                                configOperation.get(OP_ADDR).set(configAddress);
 578.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 579.                                xadatasourcePropertiesOperations.add(configOperation);
 580.                                break;
 581.                            }
 582.                            case XA_DATASOURCE_CLASS: {
 583.                                String value = rawElementText(reader);
 584.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 585.                                break;
 586.                            }
 587.                            case DRIVER: {
 588.                                String value = rawElementText(reader);
 589.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 590.                                break;
 591.                            }
 592.                            case XA_POOL: {
 593.                                parseXaPool(reader, operation);
 594.                                break;
 595.                            }
 596.                            case NEW_CONNECTION_SQL: {
 597.                                String value = rawElementText(reader);
 598.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 599.                                break;
 600.                            }
 601.                            case URL_DELIMITER: {
 602.                                String value = rawElementText(reader);
 603.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 604.                                break;
 605.                            }
 606.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 607.                                String value = rawElementText(reader);
 608.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 609.                                break;
 610.                            }
 611.                            case TRANSACTION_ISOLATION: {
 612.                                String value = rawElementText(reader);
 613.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 614.                                break;
 615.                            }
 616.                            case SECURITY: {
 617.                                parseDsSecurity(reader, operation);
 618.                                break;
 619.                            }
 620.                            case STATEMENT: {
 621.                                parseStatementSettings(reader, operation);
 622.                                break;
 623.                            }
 624.                            case TIMEOUT: {
 625.                                parseTimeOutSettings(reader, operation);
 626.                                break;
 627.                            }
 628.                            case VALIDATION: {
 629.                                parseValidationSetting(reader, operation);
 630.                                break;
 631.                            }
 632.                            case RECOVERY: {
 633.                                parseRecovery(reader, operation);
 634.                                break;
 635.                            }
 636.                            default:
 637.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 638.                        }
 639.                        break;
 640.                    }
 641.                }
 642.            }
 643.            throw new ParserException(bundle.unexpectedEndOfDocument());
 644.        }
 645.    
 646.    
 647.        private void parseDriver(final XMLExtendedStreamReader reader, final List<ModelNode> list, final...
 648.                ValidateException {
 649.            final ModelNode driverAddress = parentAddress.clone();
 650.            final ModelNode operation = new ModelNode();
 651.            operation.get(OP).set(ADD);
 652.    
 653.            String driverName = null;
 654.            for (org.jboss.jca.common.api.metadata.ds.Driver.Attribute attribute : Driver.Attribute.valu...
 655.                switch (attribute) {
 656.    
 657.                    case NAME: {
 658.                        driverName = rawAttributeText(reader, DRIVER_NAME.getXmlName());
 659.                        DRIVER_NAME.parseAndSetParameter(driverName, operation, reader);
 660.                        break;
 661.                    }
 662.                    case MAJOR_VERSION: {
 663.                        String value = rawAttributeText(reader, DRIVER_MAJOR_VERSION.getXmlName());
 664.                        DRIVER_MAJOR_VERSION.parseAndSetParameter(value, operation, reader);
 665.                        break;
 666.                    }
 667.                    case MINOR_VERSION: {
 668.                        String value = rawAttributeText(reader, DRIVER_MINOR_VERSION.getXmlName());
 669.                        DRIVER_MINOR_VERSION.parseAndSetParameter(value, operation, reader);
 670.                        break;
 671.                    }
 672.                    case MODULE: {
 673.                        String moduleName = rawAttributeText(reader, DRIVER_MODULE_NAME.getXmlName());
 674.                        String slot = null;
 675.                        if (moduleName.contains(":")) {
 676.                            slot = moduleName.substring(moduleName.indexOf(":") + 1);
 677.                            moduleName = moduleName.substring(0, moduleName.indexOf(":"));
 678.                        }
 679.                        DRIVER_MODULE_NAME.parseAndSetParameter(moduleName, operation, reader);
 680.                        if (slot != null) {
 681.                            MODULE_SLOT.parseAndSetParameter(slot, operation, reader);
 682.                        }
 683.                        break;
 684.                    }
 685.                    default:
 686.                        break;
 687.                }
 688.            }
 689.            driverAddress.add(JDBC_DRIVER_NAME, driverName);
 690.            driverAddress.protect();
 691.    
 692.            operation.get(OP_ADDR).set(driverAddress);
 693.    
 694.            boolean driverClassMatched = false;
 695.            boolean xaDatasourceClassMatched = false;
 696.            boolean datasourceClassMatched = false;
 697.            //elements reading
 698.            while (reader.hasNext()) {
 699.                switch (reader.nextTag()) {
 700.                    case END_ELEMENT: {
 701.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DRIVER) {
 702.                            list.add(operation);
 703.                            return;
 704.                        } else {
 705.                            if (Driver.Tag.forName(reader.getLocalName()) == Driver.Tag.UNKNOWN) {
 706.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 707.                            }
 708.                        }
 709.                        break;
 710.                    }
 711.                    case START_ELEMENT: {
 712.                        switch (Driver.Tag.forName(reader.getLocalName())) {
 713.                            case DATASOURCE_CLASS: {
 714.                                if (datasourceClassMatched) {
 715.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_DATASOURCE...
 716.                                }
 717.                                String value = rawElementText(reader);
 718.                                DRIVER_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, read...
 719.                                datasourceClassMatched = true;
 720.                                break;
 721.                            }
 722.                            case XA_DATASOURCE_CLASS: {
 723.                                if (xaDatasourceClassMatched) {
 724.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_XA_DATASOU...
 725.                                }
 726.                                String value = rawElementText(reader);
 727.                                DRIVER_XA_DATASOURCE_CLASS_NAME.parseAndSetParameter(value, operation, r...
 728.                                xaDatasourceClassMatched = true;
 729.                                break;
 730.                            }
 731.                            case DRIVER_CLASS: {
 732.                                if (driverClassMatched) {
 733.                                    throw new ParserException(bundle.unexpectedElement(DRIVER_CLASS_NAME...
 734.                                }
 735.                                String value = rawElementText(reader);
 736.                                DRIVER_CLASS_NAME.parseAndSetParameter(value, operation, reader);
 737.                                driverClassMatched = true;
 738.                                break;
 739.                            }
 740.                            default:
 741.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 742.                        }
 743.                        break;
 744.                    }
 745.                }
 746.            }
 747.            throw new ParserException(bundle.unexpectedEndOfDocument());
 748.        }
 749.    
 750.        private void parseXADataSource_1_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 751.                ValidateException {
 752.    
 753.            String poolName = null;
 754.            final ModelNode operation = new ModelNode();
 755.            operation.get(OP).set(ADD);
 756.    
 757.            final int count = reader.getAttributeCount();
 758.            for (int i = 0; i < count; i++) {
 759.                if (!isNoNamespaceAttribute(reader, i)) {
 760.                    throw unexpectedAttribute(reader, i);
 761.                }
 762.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 763.                switch (attribute) {
 764.                    case ENABLED: {
 765.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 766.                        if (value != null) {
 767.                            ENABLED.parseAndSetParameter(value, operation, reader);
 768.                        }
 769.                        break;
 770.                    }
 771.                    case JNDI_NAME: {
 772.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 773.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 774.                        break;
 775.                    }
 776.                    case POOL_NAME: {
 777.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 778.                        break;
 779.                    }
 780.                    case USE_JAVA_CONTEXT: {
 781.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 782.                        if (value != null) {
 783.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 784.                        }
 785.                        break;
 786.                    }
 787.                    case SPY: {
 788.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 789.                        if (value != null) {
 790.                            SPY.parseAndSetParameter(value, operation, reader);
 791.                        }
 792.                        break;
 793.                    }
 794.                    case USE_CCM: {
 795.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 796.                        if (value != null) {
 797.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 798.                        }
 799.                        break;
 800.                    }
 801.                    default:
 802.                        throw ParseUtils.unexpectedAttribute(reader, i);
 803.                }
 804.            }
 805.    
 806.    
 807.            final ModelNode dsAddress = parentAddress.clone();
 808.            dsAddress.add(XA_DATASOURCE, poolName);
 809.            dsAddress.protect();
 810.    
 811.            operation.get(OP_ADDR).set(dsAddress);
 812.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
 813.    
 814.            //elements reading
 815.            while (reader.hasNext()) {
 816.                switch (reader.nextTag()) {
 817.                    case END_ELEMENT: {
 818.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
 819.    
 820.                            list.add(operation);
 821.                            list.addAll(xadatasourcePropertiesOperations);
 822.    
 823.                            return;
 824.                        } else {
 825.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
 826.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 827.                            }
 828.                        }
 829.                        break;
 830.                    }
 831.                    case START_ELEMENT: {
 832.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
 833.                            case XA_DATASOURCE_PROPERTY: {
 834.                                String name = rawAttributeText(reader, "name");
 835.                                String value = rawElementText(reader);
 836.    
 837.                                final ModelNode configOperation = new ModelNode();
 838.                                configOperation.get(OP).set(ADD);
 839.    
 840.                                final ModelNode configAddress = dsAddress.clone();
 841.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
 842.                                configAddress.protect();
 843.    
 844.                                configOperation.get(OP_ADDR).set(configAddress);
 845.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
 846.                                xadatasourcePropertiesOperations.add(configOperation);
 847.                                break;
 848.                            }
 849.                            case XA_DATASOURCE_CLASS: {
 850.                                String value = rawElementText(reader);
 851.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
 852.                                break;
 853.                            }
 854.                            case DRIVER: {
 855.                                String value = rawElementText(reader);
 856.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
 857.                                break;
 858.                            }
 859.                            case XA_POOL: {
 860.                                parseXaPool(reader, operation);
 861.                                break;
 862.                            }
 863.                            case NEW_CONNECTION_SQL: {
 864.                                String value = rawElementText(reader);
 865.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
 866.                                break;
 867.                            }
 868.                            case URL_DELIMITER: {
 869.                                String value = rawElementText(reader);
 870.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
 871.                                break;
 872.                            }
 873.                            case URL_PROPERTY: {
 874.                                String value = rawElementText(reader);
 875.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
 876.                                break;
 877.                            }
 878.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
 879.                                String value = rawElementText(reader);
 880.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
 881.                                break;
 882.                            }
 883.                            case TRANSACTION_ISOLATION: {
 884.                                String value = rawElementText(reader);
 885.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
 886.                                break;
 887.                            }
 888.                            case SECURITY: {
 889.                                parseDsSecurity(reader, operation);
 890.                                break;
 891.                            }
 892.                            case STATEMENT: {
 893.                                parseStatementSettings(reader, operation);
 894.                                break;
 895.                            }
 896.                            case TIMEOUT: {
 897.                                parseTimeOutSettings(reader, operation);
 898.                                break;
 899.                            }
 900.                            case VALIDATION: {
 901.                                parseValidationSetting(reader, operation);
 902.                                break;
 903.                            }
 904.                            case RECOVERY: {
 905.                                parseRecovery(reader, operation);
 906.                                break;
 907.                            }
 908.                            default:
 909.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 910.                        }
 911.                        break;
 912.                    }
 913.                }
 914.            }
 915.            throw new ParserException(bundle.unexpectedEndOfDocument());
 916.        }
 917.    
 918.        private void parseXADataSource_3_0(XMLExtendedStreamReader reader, final List<ModelNode> list, f...
 919.                ValidateException {
 920.    
 921.            String poolName = null;
 922.            final ModelNode operation = new ModelNode();
 923.            operation.get(OP).set(ADD);
 924.            final int count = reader.getAttributeCount();
 925.            for (int i = 0; i < count; i++) {
 926.                if (!isNoNamespaceAttribute(reader, i)) {
 927.                    throw unexpectedAttribute(reader, i);
 928.                }
 929.                final XaDataSource.Attribute attribute = XaDataSource.Attribute.forName(reader.getAttrib...
 930.                switch (attribute) {
 931.                    case ENABLED: {
 932.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
 933.                        if (value != null) {
 934.                            ENABLED.parseAndSetParameter(value, operation, reader);
 935.                        }
 936.                        break;
 937.                    }
 938.                    case JNDI_NAME: {
 939.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
 940.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
 941.                        break;
 942.                    }
 943.                    case POOL_NAME: {
 944.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
 945.                        break;
 946.                    }
 947.                    case USE_JAVA_CONTEXT: {
 948.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 949.                        if (value != null) {
 950.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
 951.                        }
 952.                        break;
 953.                    }
 954.                    case SPY: {
 955.                        final String value = rawAttributeText(reader, SPY.getXmlName());
 956.                        if (value != null) {
 957.                            SPY.parseAndSetParameter(value, operation, reader);
 958.                        }
 959.                        break;
 960.                    }
 961.                    case USE_CCM: {
 962.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
 963.                        if (value != null) {
 964.                            USE_CCM.parseAndSetParameter(value, operation, reader);
 965.                        }
 966.                        break;
 967.                    }
 968.                    case CONNECTABLE: {
 969.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
 970.                        if (value != null) {
 971.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
 972.                        }
 973.                        break;
 974.                    }
 975.                    case TRACKING: {
 976.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
 977.                        if (value != null) {
 978.                            TRACKING.parseAndSetParameter(value, operation, reader);
 979.                        }
 980.                        break;
 981.                    }
 982.                    default:
 983.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
 984.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
 985.                            if (value != null) {
 986.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
 987.                            }
 988.                            break;
 989.    
 990.                        } else {
 991.                            throw ParseUtils.unexpectedAttribute(reader, i);
 992.                        }
 993.                }
 994.            }
 995.    
 996.    
 997.            final ModelNode dsAddress = parentAddress.clone();
 998.            dsAddress.add(XA_DATASOURCE, poolName);
 999.            dsAddress.protect();
1000.    
1001.            operation.get(OP_ADDR).set(dsAddress);
1002.            List<ModelNode> xadatasourcePropertiesOperations = new ArrayList<ModelNode>(0);
1003.    
1004.            //elements reading
1005.            while (reader.hasNext()) {
1006.                switch (reader.nextTag()) {
1007.                    case END_ELEMENT: {
1008.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.XA_DATASOU...
1009.    
1010.                            list.add(operation);
1011.                            list.addAll(xadatasourcePropertiesOperations);
1012.    
1013.                            return;
1014.                        } else {
1015.                            if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.UNKN...
1016.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1017.                            }
1018.                        }
1019.                        break;
1020.                    }
1021.                    case START_ELEMENT: {
1022.                        switch (XaDataSource.Tag.forName(reader.getLocalName())) {
1023.                            case XA_DATASOURCE_PROPERTY: {
1024.                                String name = rawAttributeText(reader, "name");
1025.                                String value = rawElementText(reader);
1026.    
1027.                                final ModelNode configOperation = new ModelNode();
1028.                                configOperation.get(OP).set(ADD);
1029.    
1030.                                final ModelNode configAddress = dsAddress.clone();
1031.                                configAddress.add(XADATASOURCE_PROPERTIES.getName(), name);
1032.                                configAddress.protect();
1033.    
1034.                                configOperation.get(OP_ADDR).set(configAddress);
1035.                                XADATASOURCE_PROPERTY_VALUE.parseAndSetParameter(value, configOperation,...
1036.                                xadatasourcePropertiesOperations.add(configOperation);
1037.                                break;
1038.                            }
1039.                            case XA_DATASOURCE_CLASS: {
1040.                                String value = rawElementText(reader);
1041.                                XA_DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1042.                                break;
1043.                            }
1044.                            case DRIVER: {
1045.                                String value = rawElementText(reader);
1046.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1047.                                break;
1048.                            }
1049.                            case XA_POOL: {
1050.                                parseXaPool(reader, operation);
1051.                                break;
1052.                            }
1053.                            case NEW_CONNECTION_SQL: {
1054.                                String value = rawElementText(reader);
1055.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1056.                                break;
1057.                            }
1058.                            case URL_DELIMITER: {
1059.                                String value = rawElementText(reader);
1060.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1061.                                break;
1062.                            }
1063.                            case URL_PROPERTY: {
1064.                                String value = rawElementText(reader);
1065.                                URL_PROPERTY.parseAndSetParameter(value, operation, reader);
1066.                                break;
1067.                            }
1068.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1069.                                String value = rawElementText(reader);
1070.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1071.                                break;
1072.                            }
1073.                            case TRANSACTION_ISOLATION: {
1074.                                String value = rawElementText(reader);
1075.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1076.                                break;
1077.                            }
1078.                            case SECURITY: {
1079.                                parseDsSecurity(reader, operation);
1080.                                break;
1081.                            }
1082.                            case STATEMENT: {
1083.                                parseStatementSettings(reader, operation);
1084.                                break;
1085.                            }
1086.                            case TIMEOUT: {
1087.                                parseTimeOutSettings(reader, operation);
1088.                                break;
1089.                            }
1090.                            case VALIDATION: {
1091.                                parseValidationSetting(reader, operation);
1092.                                break;
1093.                            }
1094.                            case RECOVERY: {
1095.                                parseRecovery(reader, operation);
1096.                                break;
1097.                            }
1098.                            default:
1099.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1100.                        }
1101.                        break;
1102.                    }
1103.                }
1104.            }
1105.            throw new ParserException(bundle.unexpectedEndOfDocument());
1106.        }
1107.    
1108.        private void parseDsSecurity(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1109.                ValidateException {
1110.    
1111.            boolean securityDomainMatched = false;
1112.            while (reader.hasNext()) {
1113.                switch (reader.nextTag()) {
1114.                    case END_ELEMENT: {
1115.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
1116.    
1117.                            //it's fine, do nothing
1118.                            return;
1119.                        } else {
1120.                            if (DsSecurity.Tag.forName(reader.getLocalName()) == DsSecurity.Tag.UNKNOWN)...
1121.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1122.                            }
1123.                        }
1124.                        break;
1125.                    }
1126.                    case START_ELEMENT: {
1127.                        DsSecurity.Tag tag = DsSecurity.Tag.forName(reader.getLocalName());
1128.                        switch (tag) {
1129.                            case PASSWORD: {
1130.                                String value = rawElementText(reader);
1131.                                PASSWORD.parseAndSetParameter(value, operation, reader);
1132.                                break;
1133.                            }
1134.                            case USER_NAME: {
1135.                                String value = rawElementText(reader);
1136.                                USERNAME.parseAndSetParameter(value, operation, reader);
1137.                                break;
1138.                            }
1139.                            case SECURITY_DOMAIN: {
1140.                                if (securityDomainMatched) {
1141.                                    throw new ParserException(bundle.unexpectedElement(SECURITY_DOMAIN.g...
1142.                                }
1143.                                String value = rawElementText(reader);
1144.                                SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
1145.                                securityDomainMatched = true;
1146.                                break;
1147.                            }
1148.                            case REAUTH_PLUGIN: {
1149.                                parseExtension(reader, tag.getLocalName(), operation, REAUTH_PLUGIN_CLAS...
1150.                                break;
1151.                            }
1152.                            default:
1153.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1154.                        }
1155.                        break;
1156.                    }
1157.                }
1158.            }
1159.            throw new ParserException(bundle.unexpectedEndOfDocument());
1160.        }
1161.    
1162.        private void parseDataSource_1_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1163.                ValidateException {
1164.    
1165.            String poolName = null;
1166.            final ModelNode operation = new ModelNode();
1167.            operation.get(OP).set(ADD);
1168.            final int count = reader.getAttributeCount();
1169.            for (int i = 0; i < count; i++) {
1170.                if (!isNoNamespaceAttribute(reader, i)) {
1171.                    throw unexpectedAttribute(reader, i);
1172.                }
1173.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1174.                switch (attribute) {
1175.                    case ENABLED: {
1176.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1177.                        if (value != null) {
1178.                            ENABLED.parseAndSetParameter(value, operation, reader);
1179.                        }
1180.                        break;
1181.                    }
1182.                    case JNDI_NAME: {
1183.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1184.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1185.                        break;
1186.                    }
1187.                    case POOL_NAME: {
1188.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1189.                        break;
1190.                    }
1191.                    case USE_JAVA_CONTEXT: {
1192.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1193.                        if (value != null) {
1194.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1195.                        }
1196.                        break;
1197.                    }
1198.                    case SPY: {
1199.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1200.                        if (value != null) {
1201.                            SPY.parseAndSetParameter(value, operation, reader);
1202.                        }
1203.                        break;
1204.                    }
1205.                    case USE_CCM: {
1206.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1207.                        if (value != null) {
1208.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1209.                        }
1210.                        break;
1211.                    }
1212.                    case JTA: {
1213.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1214.                        if (value != null) {
1215.                            JTA.parseAndSetParameter(value, operation, reader);
1216.                        }
1217.                        break;
1218.                    }
1219.                    default:
1220.                        throw ParseUtils.unexpectedAttribute(reader, i);
1221.                }
1222.            }
1223.    
1224.            final ModelNode dsAddress = parentAddress.clone();
1225.            dsAddress.add(DATA_SOURCE, poolName);
1226.            dsAddress.protect();
1227.    
1228.            operation.get(OP_ADDR).set(dsAddress);
1229.    
1230.    
1231.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1232.            //elements reading
1233.            while (reader.hasNext()) {
1234.                switch (reader.nextTag()) {
1235.                    case END_ELEMENT: {
1236.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1237.    
1238.                            list.add(operation);
1239.                            list.addAll(configPropertiesOperations);
1240.                            return;
1241.                        } else {
1242.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1243.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1244.                            }
1245.                        }
1246.                        break;
1247.                    }
1248.                    case START_ELEMENT: {
1249.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1250.                            case CONNECTION_PROPERTY: {
1251.                                String name = rawAttributeText(reader, "name");
1252.                                String value = rawElementText(reader);
1253.    
1254.                                final ModelNode configOperation = new ModelNode();
1255.                                configOperation.get(OP).set(ADD);
1256.    
1257.                                final ModelNode configAddress = dsAddress.clone();
1258.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1259.                                configAddress.protect();
1260.    
1261.                                configOperation.get(OP_ADDR).set(configAddress);
1262.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1263.                                configPropertiesOperations.add(configOperation);
1264.                                break;
1265.                            }
1266.                            case CONNECTION_URL: {
1267.                                String value = rawElementText(reader);
1268.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1269.                                break;
1270.                            }
1271.                            case DRIVER_CLASS: {
1272.                                String value = rawElementText(reader);
1273.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1274.                                break;
1275.                            }
1276.                            case DATASOURCE_CLASS: {
1277.                                String value = rawElementText(reader);
1278.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1279.                                break;
1280.                            }
1281.                            case DRIVER: {
1282.                                String value = rawElementText(reader);
1283.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1284.                                break;
1285.                            }
1286.                            case POOL: {
1287.                                parsePool(reader, operation);
1288.                                break;
1289.                            }
1290.                            case NEW_CONNECTION_SQL: {
1291.                                String value = rawElementText(reader);
1292.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1293.                                break;
1294.                            }
1295.                            case URL_DELIMITER: {
1296.                                String value = rawElementText(reader);
1297.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1298.                                break;
1299.                            }
1300.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1301.                                String value = rawElementText(reader);
1302.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1303.                                break;
1304.                            }
1305.                            case TRANSACTION_ISOLATION: {
1306.                                String value = rawElementText(reader);
1307.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1308.                                break;
1309.                            }
1310.                            case SECURITY: {
1311.                                parseDsSecurity(reader, operation);
1312.                                break;
1313.                            }
1314.                            case STATEMENT: {
1315.                                parseStatementSettings(reader, operation);
1316.                                break;
1317.                            }
1318.                            case TIMEOUT: {
1319.                                parseTimeOutSettings(reader, operation);
1320.                                break;
1321.                            }
1322.                            case VALIDATION: {
1323.                                parseValidationSetting(reader, operation);
1324.                                break;
1325.                            }
1326.                            default:
1327.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1328.                        }
1329.                        break;
1330.                    }
1331.                }
1332.            }
1333.            throw new ParserException(bundle.unexpectedEndOfDocument());
1334.        }
1335.    
1336.    
1337.        private void parseDataSource_3_0(final XMLExtendedStreamReader reader, final List<ModelNode> lis...
1338.                ValidateException {
1339.    
1340.            String poolName = null;
1341.            final ModelNode operation = new ModelNode();
1342.            operation.get(OP).set(ADD);
1343.            final int count = reader.getAttributeCount();
1344.            for (int i = 0; i < count; i++) {
1345.    
1346.                if (!isNoNamespaceAttribute(reader, i)) {
1347.                    throw unexpectedAttribute(reader, i);
1348.                }
1349.                final DataSource.Attribute attribute = DataSource.Attribute.forName(reader.getAttributeL...
1350.                switch (attribute) {
1351.                    case ENABLED: {
1352.                        final String value = rawAttributeText(reader, ENABLED.getXmlName());
1353.                        if (value != null) {
1354.                            ENABLED.parseAndSetParameter(value, operation, reader);
1355.                        }
1356.                        break;
1357.                    }
1358.                    case JNDI_NAME: {
1359.                        final String jndiName = rawAttributeText(reader, JNDI_NAME.getXmlName());
1360.                        JNDI_NAME.parseAndSetParameter(jndiName, operation, reader);
1361.                        break;
1362.                    }
1363.                    case POOL_NAME: {
1364.                        poolName = rawAttributeText(reader, POOLNAME_NAME);
1365.                        break;
1366.                    }
1367.                    case USE_JAVA_CONTEXT: {
1368.                        final String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
1369.                        if (value != null) {
1370.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, operation, reader);
1371.                        }
1372.                        break;
1373.                    }
1374.                    case SPY: {
1375.                        final String value = rawAttributeText(reader, SPY.getXmlName());
1376.                        if (value != null) {
1377.                            SPY.parseAndSetParameter(value, operation, reader);
1378.                        }
1379.                        break;
1380.                    }
1381.                    case USE_CCM: {
1382.                        final String value = rawAttributeText(reader, USE_CCM.getXmlName());
1383.                        if (value != null) {
1384.                            USE_CCM.parseAndSetParameter(value, operation, reader);
1385.                        }
1386.                        break;
1387.                    }
1388.                    case JTA: {
1389.                        final String value = rawAttributeText(reader, JTA.getXmlName());
1390.                        if (value != null) {
1391.                            JTA.parseAndSetParameter(value, operation, reader);
1392.                        }
1393.                        break;
1394.                    }
1395.                    case CONNECTABLE: {
1396.                        final String value = rawAttributeText(reader, CONNECTABLE.getXmlName());
1397.                        if (value != null) {
1398.                            CONNECTABLE.parseAndSetParameter(value, operation, reader);
1399.                        }
1400.                        break;
1401.                    }
1402.                    case TRACKING: {
1403.                        final String value = rawAttributeText(reader, TRACKING.getXmlName());
1404.                        if (value != null) {
1405.                            TRACKING.parseAndSetParameter(value, operation, reader);
1406.                        }
1407.                        break;
1408.                    }
1409.                    default:
1410.                        if (Constants.STATISTICS_ENABLED.getName().equals(reader.getAttributeLocalName(i...
1411.                            final String value = rawAttributeText(reader, Constants.STATISTICS_ENABLED.g...
1412.                            if (value != null) {
1413.                                Constants.STATISTICS_ENABLED.parseAndSetParameter(value, operation, read...
1414.                            }
1415.                            break;
1416.    
1417.                        } else {
1418.                            throw ParseUtils.unexpectedAttribute(reader, i);
1419.                        }
1420.                }
1421.            }
1422.            final ModelNode dsAddress = parentAddress.clone();
1423.            dsAddress.add(DATA_SOURCE, poolName);
1424.            dsAddress.protect();
1425.    
1426.            operation.get(OP_ADDR).set(dsAddress);
1427.    
1428.    
1429.            List<ModelNode> configPropertiesOperations = new ArrayList<ModelNode>(0);
1430.            //elements reading
1431.            while (reader.hasNext()) {
1432.                switch (reader.nextTag()) {
1433.                    case END_ELEMENT: {
1434.                        if (DataSources.Tag.forName(reader.getLocalName()) == DataSources.Tag.DATASOURCE...
1435.    
1436.                            list.add(operation);
1437.                            list.addAll(configPropertiesOperations);
1438.                            return;
1439.                        } else {
1440.                            if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.UNKNOWN)...
1441.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1442.                            }
1443.                        }
1444.                        break;
1445.                    }
1446.                    case START_ELEMENT: {
1447.                        switch (DataSource.Tag.forName(reader.getLocalName())) {
1448.                            case CONNECTION_PROPERTY: {
1449.                                String name = rawAttributeText(reader, "name");
1450.                                String value = rawElementText(reader);
1451.    
1452.                                final ModelNode configOperation = new ModelNode();
1453.                                configOperation.get(OP).set(ADD);
1454.    
1455.                                final ModelNode configAddress = dsAddress.clone();
1456.                                configAddress.add(CONNECTION_PROPERTIES.getName(), name);
1457.                                configAddress.protect();
1458.    
1459.                                configOperation.get(OP_ADDR).set(configAddress);
1460.                                CONNECTION_PROPERTY_VALUE.parseAndSetParameter(value, configOperation, r...
1461.                                configPropertiesOperations.add(configOperation);
1462.                                break;
1463.                            }
1464.                            case CONNECTION_URL: {
1465.                                String value = rawElementText(reader);
1466.                                CONNECTION_URL.parseAndSetParameter(value, operation, reader);
1467.                                break;
1468.                            }
1469.                            case DRIVER_CLASS: {
1470.                                String value = rawElementText(reader);
1471.                                DRIVER_CLASS.parseAndSetParameter(value, operation, reader);
1472.                                break;
1473.                            }
1474.                            case DATASOURCE_CLASS: {
1475.                                String value = rawElementText(reader);
1476.                                DATASOURCE_CLASS.parseAndSetParameter(value, operation, reader);
1477.                                break;
1478.                            }
1479.                            case DRIVER: {
1480.                                String value = rawElementText(reader);
1481.                                DATASOURCE_DRIVER.parseAndSetParameter(value, operation, reader);
1482.                                break;
1483.                            }
1484.                            case POOL: {
1485.                                parsePool(reader, operation);
1486.                                break;
1487.                            }
1488.                            case NEW_CONNECTION_SQL: {
1489.                                String value = rawElementText(reader);
1490.                                NEW_CONNECTION_SQL.parseAndSetParameter(value, operation, reader);
1491.                                break;
1492.                            }
1493.                            case URL_DELIMITER: {
1494.                                String value = rawElementText(reader);
1495.                                URL_DELIMITER.parseAndSetParameter(value, operation, reader);
1496.                                break;
1497.                            }
1498.                            case URL_SELECTOR_STRATEGY_CLASS_NAME: {
1499.                                String value = rawElementText(reader);
1500.                                URL_SELECTOR_STRATEGY_CLASS_NAME.parseAndSetParameter(value, operation, ...
1501.                                break;
1502.                            }
1503.                            case TRANSACTION_ISOLATION: {
1504.                                String value = rawElementText(reader);
1505.                                TRANSACTION_ISOLATION.parseAndSetParameter(value, operation, reader);
1506.                                break;
1507.                            }
1508.                            case SECURITY: {
1509.                                parseDsSecurity(reader, operation);
1510.                                break;
1511.                            }
1512.                            case STATEMENT: {
1513.                                parseStatementSettings(reader, operation);
1514.                                break;
1515.                            }
1516.                            case TIMEOUT: {
1517.                                parseTimeOutSettings(reader, operation);
1518.                                break;
1519.                            }
1520.                            case VALIDATION: {
1521.                                parseValidationSetting(reader, operation);
1522.                                break;
1523.                            }
1524.                            default:
1525.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1526.                        }
1527.                        break;
1528.                    }
1529.                }
1530.            }
1531.            throw new ParserException(bundle.unexpectedEndOfDocument());
1532.        }
1533.    
1534.    
1535.        private void parsePool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLStre...
1536.                ValidateException {
1537.    
1538.            while (reader.hasNext()) {
1539.                switch (reader.nextTag()) {
1540.                    case END_ELEMENT: {
1541.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
1542.                            return;
1543.                            //it's fine. Do nothing
1544.                        } else {
1545.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.UNKNOWN) {
1546.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1547.                            }
1548.                        }
1549.                        break;
1550.                    }
1551.                    case START_ELEMENT: {
1552.                        switch (DsPool.Tag.forName(reader.getLocalName())) {
1553.                            case MAX_POOL_SIZE: {
1554.                                String value = rawElementText(reader);
1555.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1556.                                break;
1557.                            }
1558.                            case INITIAL_POOL_SIZE: {
1559.                                String value = rawElementText(reader);
1560.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1561.                                break;
1562.                            }
1563.                            case MIN_POOL_SIZE: {
1564.                                String value = rawElementText(reader);
1565.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1566.                                break;
1567.                            }
1568.                            case PREFILL: {
1569.                                String value = rawElementText(reader);
1570.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1571.                                break;
1572.                            }
1573.                            case USE_STRICT_MIN: {
1574.                                String value = rawElementText(reader);
1575.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1576.                                break;
1577.                            }
1578.                            case FLUSH_STRATEGY: {
1579.                                String value = rawElementText(reader);
1580.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1581.                                break;
1582.                            }
1583.                            case ALLOW_MULTIPLE_USERS: {
1584.                                String value = rawElementText(reader);
1585.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1586.                                break;
1587.                            }
1588.                            case CAPACITY: {
1589.                                parseCapacity(reader, operation);
1590.                                break;
1591.                            }
1592.                            case CONNECTION_LISTENER: {
1593.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1594.                                break;
1595.                            }
1596.                            case UNKNOWN: {
1597.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1598.                            }
1599.                            default: {
1600.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1601.                            }
1602.                        }
1603.                        break;
1604.                    }
1605.                }
1606.            }
1607.            throw new ParserException(bundle.unexpectedEndOfDocument());
1608.        }
1609.    
1610.    
1611.        private void parseXaPool(XMLExtendedStreamReader reader, final ModelNode operation) throws XMLSt...
1612.                ValidateException {
1613.    
1614.            while (reader.hasNext()) {
1615.                switch (reader.nextTag()) {
1616.                    case END_ELEMENT: {
1617.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
1618.                            return;
1619.                            //it's fine. Do nothing
1620.                        } else {
1621.                            if (DsXaPool.Tag.forName(reader.getLocalName()) == DsXaPool.Tag.UNKNOWN) {
1622.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1623.                            }
1624.                        }
1625.                        break;
1626.                    }
1627.                    case START_ELEMENT: {
1628.                        switch (DsXaPool.Tag.forName(reader.getLocalName())) {
1629.                            case MAX_POOL_SIZE: {
1630.                                String value = rawElementText(reader);
1631.                                MAX_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1632.                                break;
1633.                            }
1634.                            case INITIAL_POOL_SIZE: {
1635.                                String value = rawElementText(reader);
1636.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1637.                                break;
1638.                            }
1639.                            case MIN_POOL_SIZE: {
1640.                                String value = rawElementText(reader);
1641.                                MIN_POOL_SIZE.parseAndSetParameter(value, operation, reader);
1642.                                break;
1643.                            }
1644.                            case PREFILL: {
1645.                                String value = rawElementText(reader);
1646.                                POOL_PREFILL.parseAndSetParameter(value, operation, reader);
1647.                                break;
1648.                            }
1649.                            case USE_STRICT_MIN: {
1650.                                String value = rawElementText(reader);
1651.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, operation, reader);
1652.                                break;
1653.                            }
1654.                            case FLUSH_STRATEGY: {
1655.                                String value = rawElementText(reader);
1656.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, operation, reader);
1657.                                break;
1658.                            }
1659.                            case ALLOW_MULTIPLE_USERS: {
1660.                                String value = rawElementText(reader);
1661.                                ALLOW_MULTIPLE_USERS.parseAndSetParameter(value, operation, reader);
1662.                                break;
1663.                            }
1664.                            case CONNECTION_LISTENER: {
1665.                                parseExtension(reader, reader.getLocalName(), operation, CONNECTION_LIST...
1666.                                break;
1667.                            }
1668.                            case INTERLEAVING: {
1669.                                //tag presence is sufficient to set it to true
1670.                                String value = rawElementText(reader);
1671.                                value = value == null ? "true" : value;
1672.                                INTERLEAVING.parseAndSetParameter(value, operation, reader);
1673.                                break;
1674.                            }
1675.                            case IS_SAME_RM_OVERRIDE: {
1676.                                String value = rawElementText(reader);
1677.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, operation, reader);
1678.                                break;
1679.                            }
1680.                            case NO_TX_SEPARATE_POOLS: {
1681.                                //tag presence is sufficient to set it to true
1682.                                String value = rawElementText(reader);
1683.                                value = value == null ? "true" : value;
1684.                                NO_TX_SEPARATE_POOL.parseAndSetParameter(value, operation, reader);
1685.                                break;
1686.                            }
1687.                            case PAD_XID: {
1688.                                String value = rawElementText(reader);
1689.                                PAD_XID.parseAndSetParameter(value, operation, reader);
1690.                                break;
1691.                            }
1692.                            case WRAP_XA_RESOURCE: {
1693.                                String value = rawElementText(reader);
1694.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, operation, reader);
1695.                                break;
1696.                            }
1697.                            case CAPACITY: {
1698.                                parseCapacity(reader, operation);
1699.                                break;
1700.                            }
1701.    
1702.                            default:
1703.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1704.                        }
1705.                        break;
1706.                    }
1707.                }
1708.            }
1709.            throw new ParserException(bundle.unexpectedEndOfDocument());
1710.        }
1711.    
1712.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1713.                    ValidateException {
1714.    
1715.                while (reader.hasNext()) {
1716.                    switch (reader.nextTag()) {
1717.                        case END_ELEMENT: {
1718.                            if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY ) {
1719.    
1720.                                return;
1721.                            } else {
1722.                                if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN)...
1723.                                    throw new ParserException(bundle.unexpectedEndTag(reader.getLocalNam...
1724.                                }
1725.                            }
1726.                            break;
1727.                        }
1728.                        case START_ELEMENT: {
1729.                            switch (Capacity.Tag.forName(reader.getLocalName())) {
1730.                                case INCREMENTER: {
1731.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_IN...
1732.                                    break;
1733.                                }
1734.                                case DECREMENTER: {
1735.                                    parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DE...
1736.                                    break;
1737.                                }
1738.    
1739.                                default:
1740.                                    throw new ParserException(bundle.unexpectedElement(reader.getLocalNa...
1741.                            }
1742.                            break;
1743.                        }
1744.                    }
1745.                }
1746.                throw new ParserException(bundle.unexpectedEndOfDocument());
1747.            }
1748.    
1749.    
1750.        private void parseRecovery(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
1751.                ValidateException {
1752.    
1753.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
1754.                switch (attribute) {
1755.                    case NO_RECOVERY: {
1756.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
1757.                        NO_RECOVERY.parseAndSetParameter(value, operation, reader);
1758.                        break;
1759.                    }
1760.                    default:
1761.                        break;
1762.                }
1763.            }
1764.    
1765.            while (reader.hasNext()) {
1766.                switch (reader.nextTag()) {
1767.                    case END_ELEMENT: {
1768.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
1769.                            return;
1770.                        } else {
1771.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
1772.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1773.                            }
1774.                        }
1775.                        break;
1776.                    }
1777.                    case START_ELEMENT: {
1778.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
1779.                        switch (tag) {
1780.                            case RECOVER_CREDENTIAL: {
1781.                                parseCredential(reader, operation);
1782.                                break;
1783.                            }
1784.                            case RECOVER_PLUGIN: {
1785.                                parseExtension(reader, tag.getLocalName(), operation, RECOVER_PLUGIN_CLA...
1786.                                break;
1787.                            }
1788.                            default:
1789.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1790.                        }
1791.                        break;
1792.                    }
1793.                }
1794.            }
1795.            throw new ParserException(bundle.unexpectedEndOfDocument());
1796.        }
1797.    
1798.        private void parseCredential(XMLExtendedStreamReader reader, final ModelNode operation) throws X...
1799.                ValidateException {
1800.    
1801.            while (reader.hasNext()) {
1802.                switch (reader.nextTag()) {
1803.                    case END_ELEMENT: {
1804.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
1805.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
1806.    
1807.                            return;
1808.                        } else {
1809.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
1810.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1811.                            }
1812.                        }
1813.                        break;
1814.                    }
1815.                    case START_ELEMENT: {
1816.                        switch (Credential.Tag.forName(reader.getLocalName())) {
1817.                            case PASSWORD: {
1818.                                String value = rawElementText(reader);
1819.                                RECOVERY_PASSWORD.parseAndSetParameter(value, operation, reader);
1820.                                break;
1821.                            }
1822.                            case USER_NAME: {
1823.                                String value = rawElementText(reader);
1824.                                RECOVERY_USERNAME.parseAndSetParameter(value, operation, reader);
1825.                                break;
1826.                            }
1827.                            case SECURITY_DOMAIN: {
1828.                                String value = rawElementText(reader);
1829.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);...
1830.                                break;
1831.                            }
1832.                            default:
1833.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1834.                        }
1835.                        break;
1836.                    }
1837.                }
1838.            }
1839.            throw new ParserException(bundle.unexpectedEndOfDocument());
1840.        }
1841.    
1842.        private void parseValidationSetting(XMLExtendedStreamReader reader, final ModelNode operation) t...
1843.                ValidateException {
1844.    
1845.            while (reader.hasNext()) {
1846.                switch (reader.nextTag()) {
1847.                    case END_ELEMENT: {
1848.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.VALIDATION) ...
1849.    
1850.                            return;
1851.    
1852.                        } else {
1853.                            if (Validation.Tag.forName(reader.getLocalName()) == Validation.Tag.UNKNOWN)...
1854.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1855.                            }
1856.                        }
1857.                        break;
1858.                    }
1859.                    case START_ELEMENT: {
1860.                        Validation.Tag currTag = Validation.Tag.forName(reader.getLocalName());
1861.                        switch (currTag) {
1862.                            case BACKGROUND_VALIDATION: {
1863.                                String value = rawElementText(reader);
1864.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, operation, reader);
1865.                                break;
1866.                            }
1867.                            case BACKGROUND_VALIDATION_MILLIS: {
1868.                                String value = rawElementText(reader);
1869.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, operation, reader...
1870.                                break;
1871.                            }
1872.                            case CHECK_VALID_CONNECTION_SQL: {
1873.                                String value = rawElementText(reader);
1874.                                CHECK_VALID_CONNECTION_SQL.parseAndSetParameter(value, operation, reader...
1875.                                break;
1876.                            }
1877.                            case EXCEPTION_SORTER: {
1878.                                parseExtension(reader, currTag.getLocalName(), operation, EXCEPTION_SORT...
1879.                                break;
1880.                            }
1881.                            case STALE_CONNECTION_CHECKER: {
1882.                                parseExtension(reader, currTag.getLocalName(), operation, STALE_CONNECTI...
1883.                                break;
1884.                            }
1885.                            case USE_FAST_FAIL: {
1886.                                String value = rawElementText(reader);
1887.                                USE_FAST_FAIL.parseAndSetParameter(value, operation, reader);
1888.                                break;
1889.                            }
1890.                            case VALIDATE_ON_MATCH: {
1891.                                String value = rawElementText(reader);
1892.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, operation, reader);
1893.                                break;
1894.                            }
1895.                            case VALID_CONNECTION_CHECKER: {
1896.                                parseExtension(reader, currTag.getLocalName(), operation, VALID_CONNECTI...
1897.                                break;
1898.                            }
1899.                            default: {
1900.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1901.                            }
1902.                        }
1903.                        break;
1904.                    }
1905.                }
1906.            }
1907.            throw new ParserException(bundle.unexpectedEndOfDocument());
1908.        }
1909.    
1910.        private void parseTimeOutSettings(XMLExtendedStreamReader reader, final ModelNode operation) thr...
1911.                ValidateException {
1912.    
1913.            while (reader.hasNext()) {
1914.                switch (reader.nextTag()) {
1915.                    case END_ELEMENT: {
1916.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.TIMEOUT) {
1917.    
1918.                            return;
1919.                        } else {
1920.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
1921.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1922.                            }
1923.                        }
1924.                        break;
1925.                    }
1926.                    case START_ELEMENT: {
1927.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
1928.                            case ALLOCATION_RETRY: {
1929.                                String value = rawElementText(reader);
1930.                                ALLOCATION_RETRY.parseAndSetParameter(value, operation, reader);
1931.                                break;
1932.                            }
1933.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
1934.                                String value = rawElementText(reader);
1935.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1936.                                break;
1937.                            }
1938.                            case BLOCKING_TIMEOUT_MILLIS: {
1939.                                String value = rawElementText(reader);
1940.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, operation, read...
1941.                                break;
1942.                            }
1943.                            case IDLE_TIMEOUT_MINUTES: {
1944.                                String value = rawElementText(reader);
1945.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, operation, reader);
1946.                                break;
1947.                            }
1948.                            case QUERY_TIMEOUT: {
1949.                                String value = rawElementText(reader);
1950.                                QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1951.                                break;
1952.                            }
1953.                            case SET_TX_QUERY_TIMEOUT: {
1954.                                //tag presence is sufficient to set it to true
1955.                                String value = rawElementText(reader);
1956.                                value = value == null ? "true" : value;
1957.                                SET_TX_QUERY_TIMEOUT.parseAndSetParameter(value, operation, reader);
1958.                                break;
1959.                            }
1960.                            case USE_TRY_LOCK: {
1961.                                String value = rawElementText(reader);
1962.                                USE_TRY_LOCK.parseAndSetParameter(value, operation, reader);
1963.                                break;
1964.                            }
1965.                            case XA_RESOURCE_TIMEOUT: {
1966.                                String value = rawElementText(reader);
1967.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, operation, reader);
1968.                                break;
1969.                            }
1970.                            default:
1971.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
1972.                        }
1973.                        break;
1974.                    }
1975.                }
1976.            }
1977.            throw new ParserException(bundle.unexpectedEndOfDocument());
1978.        }
1979.    
1980.        private void parseStatementSettings(XMLExtendedStreamReader reader, final ModelNode operation) t...
1981.                ValidateException {
1982.    
1983.            while (reader.hasNext()) {
1984.                switch (reader.nextTag()) {
1985.                    case END_ELEMENT: {
1986.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.STATEMENT) {...
1987.    
1988.                            return;
1989.                        } else {
1990.                            if (Statement.Tag.forName(reader.getLocalName()) == Statement.Tag.UNKNOWN) {...
1991.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
1992.                            }
1993.                        }
1994.                        break;
1995.                    }
1996.                    case START_ELEMENT: {
1997.                        switch (Statement.Tag.forName(reader.getLocalName())) {
1998.                            case PREPARED_STATEMENT_CACHE_SIZE: {
1999.                                String value = rawElementText(reader);
2000.                                PREPARED_STATEMENTS_CACHE_SIZE.parseAndSetParameter(value, operation, re...
2001.                                break;
2002.                            }
2003.                            case TRACK_STATEMENTS: {
2004.                                String value = rawElementText(reader);
2005.                                TRACK_STATEMENTS.parseAndSetParameter(value, operation, reader);
2006.                                break;
2007.                            }
2008.                            case SHARE_PREPARED_STATEMENTS: {
2009.                                //tag presence is sufficient to set it to true
2010.                                String value = rawElementText(reader);
2011.                                value = value == null ? "true" : value;
2012.                                SHARE_PREPARED_STATEMENTS.parseAndSetParameter(value, operation, reader)...
2013.                                break;
2014.                            }
2015.                            default:
2016.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
2017.                        }
2018.                        break;
2019.                    }
2020.                }
2021.            }
2022.            throw new ParserException(bundle.unexpectedEndOfDocument());
2023.        }
2024.    
2025.        /**
2026.         * A Tag.
2027.         *
2028.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
2029.         */
2030.        public enum Tag {
2031.            /**
2032.             * always first
2033.             */
2034.            UNKNOWN(null),
2035.    
2036.            /**
2037.             * jboss-ra tag name
2038.             */
2039.            DATASOURCES("datasources");
2040.    
2041.            private final String name;
2042.    
2043.            /**
2044.             * Create a new Tag.
2045.             *
2046.             * @param name a name
2047.             */
2048.            Tag(final String name) {
2049.                this.name = name;
2050.            }
2051.    
2052.            /**
2053.             * Get the local name of this element.
2054.             *
2055.             * @return the local name
2056.             */
2057.            public String getLocalName() {
2058.                return name;
2059.            }
2060.    
2061.            private static final Map<String, Tag> MAP;
2062.    
2063.            static {
2064.                final Map<String, Tag> map = new HashMap<String, Tag>();
2065.                for (Tag element : values()) {
2066.                    final String name = element.getLocalName();
2067.                    if (name != null)
2068.                        map.put(name, element);
2069.                }
2070.                MAP = map;
2071.            }
2072.    
2073.            /**
2074.             * Static method to get enum instance given localName string
2075.             *
2076.             * @param localName a string used as localname (typically tag name as defined in xsd)
2077.             * @return the enum instance
2078.             */
2079.            public static Tag forName(String localName) {
2080.                final Tag element = MAP.get(localName);
2081.                return element == null ? UNKNOWN : element;
2082.            }
2083.    
2084.        }
2085.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.resourceadapters;
  23.    
  24.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  25.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  26.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATION;
  27.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BACKGROUNDVALIDATIONMILLIS;
  28.    import static org.jboss.as.connector.subsystems.common.pool.Constants.BLOCKING_TIMEOUT_WAIT_MILLIS;
  29.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_CLASS;
  30.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_DECREMENTER_PROPERTIE...
  31.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_CLASS;
  32.    import static org.jboss.as.connector.subsystems.common.pool.Constants.CAPACITY_INCREMENTER_PROPERTIE...
  33.    import static org.jboss.as.connector.subsystems.common.pool.Constants.IDLETIMEOUTMINUTES;
  34.    import static org.jboss.as.connector.subsystems.common.pool.Constants.INITIAL_POOL_SIZE;
  35.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MAX_POOL_SIZE;
  36.    import static org.jboss.as.connector.subsystems.common.pool.Constants.MIN_POOL_SIZE;
  37.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_FLUSH_STRATEGY;
  38.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_PREFILL;
  39.    import static org.jboss.as.connector.subsystems.common.pool.Constants.POOL_USE_STRICT_MIN;
  40.    import static org.jboss.as.connector.subsystems.common.pool.Constants.USE_FAST_FAIL;
  41.    import static org.jboss.as.connector.subsystems.common.pool.Constants.VALIDATE_ON_MATCH;
  42.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ALLOCATION_RETRY;
  43.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ALLOCATION_RETRY_WAIT_MIL...
  44.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.APPLICATION;
  45.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CLASS_NAME;
  46.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONFIG_PROPERTY_VALUE;
  47.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONNECTABLE;
  48.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ENABLED;
  49.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ENLISTMENT;
  50.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.INTERLEAVING;
  51.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.JNDINAME;
  52.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.NOTXSEPARATEPOOL;
  53.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.NO_RECOVERY;
  54.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.PAD_XID;
  55.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.POOL_NAME_NAME;
  56.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERLUGIN_CLASSNAME;
  57.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERLUGIN_PROPERTIES;
  58.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERY_PASSWORD;
  59.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERY_SECURITY_DOMAIN;...
  60.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RECOVERY_USERNAME;
  61.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SAME_RM_OVERRIDE;
  62.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SECURITY_DOMAIN;
  63.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SECURITY_DOMAIN_AND_APPLI...
  64.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.SHARABLE;
  65.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.TRACKING;
  66.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.USE_CCM;
  67.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.USE_JAVA_CONTEXT;
  68.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WRAP_XA_RESOURCE;
  69.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.XA_RESOURCE_TIMEOUT;
  70.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
  71.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
  72.    
  73.    import java.util.EnumSet;
  74.    import java.util.HashMap;
  75.    import java.util.Map;
  76.    
  77.    import javax.xml.stream.XMLStreamException;
  78.    
  79.    import org.jboss.as.connector.util.AbstractParser;
  80.    import org.jboss.as.connector.util.ParserException;
  81.    import org.jboss.as.controller.parsing.ParseUtils;
  82.    import org.jboss.dmr.ModelNode;
  83.    import org.jboss.jca.common.CommonBundle;
  84.    import org.jboss.jca.common.api.metadata.common.Capacity;
  85.    import org.jboss.jca.common.api.metadata.common.Credential;
  86.    import org.jboss.jca.common.api.metadata.common.Pool;
  87.    import org.jboss.jca.common.api.metadata.common.Recovery;
  88.    import org.jboss.jca.common.api.metadata.common.Security;
  89.    import org.jboss.jca.common.api.metadata.common.TimeOut;
  90.    import org.jboss.jca.common.api.metadata.common.Validation;
  91.    import org.jboss.jca.common.api.metadata.common.XaPool;
  92.    import org.jboss.jca.common.api.metadata.ds.DataSource;
  93.    import org.jboss.jca.common.api.metadata.ds.DsPool;
  94.    import org.jboss.jca.common.api.metadata.ds.XaDataSource;
  95.    import org.jboss.jca.common.api.metadata.resourceadapter.Activation;
  96.    import org.jboss.jca.common.api.metadata.resourceadapter.AdminObject;
  97.    import org.jboss.jca.common.api.metadata.resourceadapter.ConnectionDefinition;
  98.    import org.jboss.jca.common.api.validator.ValidateException;
  99.    import org.jboss.logging.Messages;
 100.    import org.jboss.staxmapper.XMLExtendedStreamReader;
 101.    
 102.    /**
 103.     * A CommonIronJacamarParser.
 104.     *
 105.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 106.     */
 107.    public abstract class CommonIronJacamarParser extends AbstractParser {
 108.        /**
 109.         * The bundle
 110.         */
 111.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
 112.    
 113.    
 114.        protected void parseConfigProperties(final XMLExtendedStreamReader reader, final Map<String, Mod...
 115.            String name = rawAttributeText(reader, "name");
 116.            final ModelNode operation = new ModelNode();
 117.            operation.get(OP).set(ADD);
 118.            String value = rawElementText(reader);
 119.            CONFIG_PROPERTY_VALUE.parseAndSetParameter(value, operation, reader);
 120.    
 121.            if (map.containsKey(name)) {
 122.                throw ParseUtils.unexpectedElement(reader);
 123.            }
 124.            map.put(name, operation);
 125.        }
 126.    
 127.        /**
 128.         * parse a single connection-definition tag
 129.         *
 130.         * @param reader the reader
 131.         * @throws javax.xml.stream.XMLStreamException
 132.         *                         XMLStreamException
 133.         * @throws ParserException ParserException
 134.         * @throws org.jboss.jca.common.api.validator.ValidateException
 135.         *                         ValidateException
 136.         */
 137.        protected void parseConnectionDefinitions_3_0(final XMLExtendedStreamReader reader, final Map<St...
 138.                                                  final Map<String, HashMap<String, ModelNode>> configMa...
 139.                throws XMLStreamException, ParserException, ValidateException {
 140.    
 141.    
 142.            final ModelNode connectionDefinitionNode = new ModelNode();
 143.            connectionDefinitionNode.get(OP).set(ADD);
 144.    
 145.            String poolName = null;
 146.            String jndiName = null;
 147.            int attributeSize = reader.getAttributeCount();
 148.            boolean poolDefined = Boolean.FALSE;
 149.    
 150.            for (int i = 0; i < attributeSize; i++) {
 151.                ConnectionDefinition.Attribute attribute = ConnectionDefinition.Attribute.forName(reader...
 152.                String value = reader.getAttributeValue(i);
 153.                switch (attribute) {
 154.                    case ENABLED: {
 155.                        ENABLED.parseAndSetParameter(value, connectionDefinitionNode, reader);
 156.    
 157.                        break;
 158.                    }
 159.                    case CONNECTABLE: {
 160.                        CONNECTABLE.parseAndSetParameter(value, connectionDefinitionNode, reader);
 161.    
 162.                        break;
 163.                    }
 164.                    case TRACKING: {
 165.                        TRACKING.parseAndSetParameter(value, connectionDefinitionNode, reader);
 166.    
 167.                        break;
 168.                    }
 169.                    case JNDI_NAME: {
 170.                        jndiName = value;
 171.                        JNDINAME.parseAndSetParameter(jndiName, connectionDefinitionNode, reader);
 172.                        break;
 173.                    }
 174.                    case POOL_NAME: {
 175.                        poolName = value;
 176.                        break;
 177.                    }
 178.                    case USE_JAVA_CONTEXT: {
 179.                        USE_JAVA_CONTEXT.parseAndSetParameter(value, connectionDefinitionNode, reader);
 180.    
 181.                        break;
 182.                    }
 183.    
 184.                    case USE_CCM: {
 185.                        USE_CCM.parseAndSetParameter(value, connectionDefinitionNode, reader);
 186.                        break;
 187.                    }
 188.    
 189.                    case SHARABLE: {
 190.                        SHARABLE.parseAndSetParameter(value, connectionDefinitionNode, reader);
 191.                        break;
 192.                    }
 193.    
 194.                    case ENLISTMENT: {
 195.                        ENLISTMENT.parseAndSetParameter(value, connectionDefinitionNode, reader);
 196.                        break;
 197.                    }
 198.    
 199.                    case CLASS_NAME: {
 200.                        CLASS_NAME.parseAndSetParameter(value, connectionDefinitionNode, reader);
 201.                        break;
 202.                    }
 203.                    default:
 204.                        break;
 205.                }
 206.            }
 207.            if (poolName == null || poolName.trim().equals("")) {
 208.                if (jndiName != null && jndiName.trim().length() != 0) {
 209.                    if (jndiName.contains("/")) {
 210.                        poolName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
 211.                    } else {
 212.                        poolName = jndiName.substring(jndiName.lastIndexOf(":") + 1);
 213.                    }
 214.                } else {
 215.                    throw ParseUtils.missingRequired(reader, EnumSet.of(ConnectionDefinition.Attribute.J...
 216.                }
 217.            }
 218.    
 219.    
 220.            while (reader.hasNext()) {
 221.                switch (reader.nextTag()) {
 222.                    case END_ELEMENT: {
 223.                        if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.CONNECTION_D...
 224.    
 225.                            map.put(poolName, connectionDefinitionNode);
 226.                            return;
 227.                        } else {
 228.                            if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDef...
 229.                                throw ParseUtils.unexpectedEndElement(reader);
 230.                            }
 231.                        }
 232.                        break;
 233.                    }
 234.                    case START_ELEMENT: {
 235.                        switch (ConnectionDefinition.Tag.forName(reader.getLocalName())) {
 236.                            case CONFIG_PROPERTY: {
 237.                                if (!configMap.containsKey(poolName)) {
 238.                                    configMap.put(poolName, new HashMap<String, ModelNode>(0));
 239.                                }
 240.                                parseConfigProperties(reader, configMap.get(poolName));
 241.                                break;
 242.                            }
 243.                            case SECURITY: {
 244.                                parseSecuritySettings(reader, connectionDefinitionNode);
 245.                                break;
 246.                            }
 247.                            case TIMEOUT: {
 248.                                parseTimeOut(reader, isXa, connectionDefinitionNode);
 249.                                break;
 250.                            }
 251.                            case VALIDATION: {
 252.                                parseValidation(reader, connectionDefinitionNode);
 253.                                break;
 254.                            }
 255.                            case XA_POOL: {
 256.                                if (!isXa) {
 257.                                    throw ParseUtils.unexpectedElement(reader);
 258.                                }
 259.                                if (poolDefined) {
 260.                                    throw new ParserException(bundle.multiplePools());
 261.                                }
 262.                                parseXaPool(reader, connectionDefinitionNode);
 263.                                poolDefined = true;
 264.                                break;
 265.                            }
 266.                            case POOL: {
 267.                                if (isXa) {
 268.                                    throw ParseUtils.unexpectedElement(reader);
 269.                                }
 270.                                if (poolDefined) {
 271.                                    throw new ParserException(bundle.multiplePools());
 272.                                }
 273.                                parsePool(reader, connectionDefinitionNode);
 274.                                poolDefined = true;
 275.                                break;
 276.                            }
 277.                            case RECOVERY: {
 278.                                parseRecovery(reader, connectionDefinitionNode);
 279.                                break;
 280.                            }
 281.                            default:
 282.                                throw ParseUtils.unexpectedElement(reader);
 283.                        }
 284.                        break;
 285.                    }
 286.                }
 287.            }
 288.            throw ParseUtils.unexpectedEndElement(reader);
 289.    
 290.        }
 291.    
 292.        /**
 293.             * parse a single connection-definition tag
 294.             *
 295.             * @param reader the reader
 296.             * @throws javax.xml.stream.XMLStreamException
 297.             *                         XMLStreamException
 298.             * @throws ParserException ParserException
 299.             * @throws org.jboss.jca.common.api.validator.ValidateException
 300.             *                         ValidateException
 301.             */
 302.            protected void parseConnectionDefinitions_1_0(final XMLExtendedStreamReader reader, final Ma...
 303.                                                      final Map<String, HashMap<String, ModelNode>> conf...
 304.                    throws XMLStreamException, ParserException, ValidateException {
 305.    
 306.    
 307.                final ModelNode connectionDefinitionNode = new ModelNode();
 308.                connectionDefinitionNode.get(OP).set(ADD);
 309.    
 310.                String poolName = null;
 311.                String jndiName = null;
 312.                int attributeSize = reader.getAttributeCount();
 313.                boolean poolDefined = Boolean.FALSE;
 314.    
 315.                for (int i = 0; i < attributeSize; i++) {
 316.                    ConnectionDefinition.Attribute attribute = ConnectionDefinition.Attribute.forName(re...
 317.                    String value = reader.getAttributeValue(i);
 318.                    switch (attribute) {
 319.                        case ENABLED: {
 320.                            ENABLED.parseAndSetParameter(value, connectionDefinitionNode, reader);
 321.    
 322.                            break;
 323.                        }
 324.                        case JNDI_NAME: {
 325.                            jndiName = value;
 326.                            JNDINAME.parseAndSetParameter(jndiName, connectionDefinitionNode, reader);
 327.                            break;
 328.                        }
 329.                        case POOL_NAME: {
 330.                            poolName = value;
 331.                            break;
 332.                        }
 333.                        case USE_JAVA_CONTEXT: {
 334.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, connectionDefinitionNode, reade...
 335.    
 336.                            break;
 337.                        }
 338.    
 339.                        case USE_CCM: {
 340.                            USE_CCM.parseAndSetParameter(value, connectionDefinitionNode, reader);
 341.                            break;
 342.                        }
 343.    
 344.                        case SHARABLE: {
 345.                            SHARABLE.parseAndSetParameter(value, connectionDefinitionNode, reader);
 346.                            break;
 347.                        }
 348.    
 349.                        case ENLISTMENT: {
 350.                            ENLISTMENT.parseAndSetParameter(value, connectionDefinitionNode, reader);
 351.                            break;
 352.                        }
 353.    
 354.                        case CLASS_NAME: {
 355.                            CLASS_NAME.parseAndSetParameter(value, connectionDefinitionNode, reader);
 356.                            break;
 357.                        }
 358.                        default:
 359.                            throw ParseUtils.unexpectedAttribute(reader,i);
 360.                    }
 361.                }
 362.                if (poolName == null || poolName.trim().equals("")) {
 363.                    if (jndiName != null && jndiName.trim().length() != 0) {
 364.                        if (jndiName.contains("/")) {
 365.                            poolName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
 366.                        } else {
 367.                            poolName = jndiName.substring(jndiName.lastIndexOf(":") + 1);
 368.                        }
 369.                    } else {
 370.                        throw ParseUtils.missingRequired(reader, EnumSet.of(ConnectionDefinition.Attribu...
 371.                    }
 372.                }
 373.    
 374.    
 375.                while (reader.hasNext()) {
 376.                    switch (reader.nextTag()) {
 377.                        case END_ELEMENT: {
 378.                            if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.CONNECTI...
 379.    
 380.                                map.put(poolName, connectionDefinitionNode);
 381.                                return;
 382.                            } else {
 383.                                if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == Connectio...
 384.                                    throw ParseUtils.unexpectedEndElement(reader);
 385.                                }
 386.                            }
 387.                            break;
 388.                        }
 389.                        case START_ELEMENT: {
 390.                            switch (ConnectionDefinition.Tag.forName(reader.getLocalName())) {
 391.                                case CONFIG_PROPERTY: {
 392.                                    if (!configMap.containsKey(poolName)) {
 393.                                        configMap.put(poolName, new HashMap<String, ModelNode>(0));
 394.                                    }
 395.                                    parseConfigProperties(reader, configMap.get(poolName));
 396.                                    break;
 397.                                }
 398.                                case SECURITY: {
 399.                                    parseSecuritySettings(reader, connectionDefinitionNode);
 400.                                    break;
 401.                                }
 402.                                case TIMEOUT: {
 403.                                    parseTimeOut(reader, isXa, connectionDefinitionNode);
 404.                                    break;
 405.                                }
 406.                                case VALIDATION: {
 407.                                    parseValidation(reader, connectionDefinitionNode);
 408.                                    break;
 409.                                }
 410.                                case XA_POOL: {
 411.                                    if (!isXa) {
 412.                                        throw ParseUtils.unexpectedElement(reader);
 413.                                    }
 414.                                    if (poolDefined) {
 415.                                        throw new ParserException(bundle.multiplePools());
 416.                                    }
 417.                                    parseXaPool(reader, connectionDefinitionNode);
 418.                                    poolDefined = true;
 419.                                    break;
 420.                                }
 421.                                case POOL: {
 422.                                    if (isXa) {
 423.                                        throw ParseUtils.unexpectedElement(reader);
 424.                                    }
 425.                                    if (poolDefined) {
 426.                                        throw new ParserException(bundle.multiplePools());
 427.                                    }
 428.                                    parsePool(reader, connectionDefinitionNode);
 429.                                    poolDefined = true;
 430.                                    break;
 431.                                }
 432.                                case RECOVERY: {
 433.                                    parseRecovery(reader, connectionDefinitionNode);
 434.                                    break;
 435.                                }
 436.                                default:
 437.                                    throw ParseUtils.unexpectedElement(reader);
 438.                            }
 439.                            break;
 440.                        }
 441.                    }
 442.                }
 443.                throw ParseUtils.unexpectedEndElement(reader);
 444.    
 445.            }
 446.    
 447.    
 448.    
 449.        private void parseValidation(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExc...
 450.    
 451.            while (reader.hasNext()) {
 452.                switch (reader.nextTag()) {
 453.                    case END_ELEMENT: {
 454.                        if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDefinit...
 455.    
 456.                            return;
 457.                        } else {
 458.                            if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDef...
 459.                                throw ParseUtils.unexpectedEndElement(reader);
 460.                            }
 461.                        }
 462.                        break;
 463.                    }
 464.                    case START_ELEMENT: {
 465.                        switch (Validation.Tag.forName(reader.getLocalName())) {
 466.                            case BACKGROUND_VALIDATION: {
 467.                                String value = rawElementText(reader);
 468.                                BACKGROUNDVALIDATION.parseAndSetParameter(value, node, reader);
 469.                                break;
 470.                            }
 471.                            case BACKGROUND_VALIDATION_MILLIS: {
 472.                                String value = rawElementText(reader);
 473.                                BACKGROUNDVALIDATIONMILLIS.parseAndSetParameter(value, node, reader);
 474.                                break;
 475.                            }
 476.                            case USE_FAST_FAIL: {
 477.                                String value = rawElementText(reader);
 478.                                USE_FAST_FAIL.parseAndSetParameter(value, node, reader);
 479.                                break;
 480.                            }
 481.                            case VALIDATE_ON_MATCH: {
 482.                                String value = rawElementText(reader);
 483.                                VALIDATE_ON_MATCH.parseAndSetParameter(value, node, reader);
 484.                                break;
 485.                            }
 486.                            default:
 487.                                throw ParseUtils.unexpectedElement(reader);
 488.    
 489.                        }
 490.                        break;
 491.                    }
 492.                }
 493.            }
 494.            throw ParseUtils.unexpectedEndElement(reader);
 495.        }
 496.    
 497.        private void parseTimeOut(XMLExtendedStreamReader reader, Boolean isXa, ModelNode node) throws X...
 498.                ParserException, ValidateException {
 499.    
 500.            while (reader.hasNext()) {
 501.                switch (reader.nextTag()) {
 502.                    case END_ELEMENT: {
 503.                        if (ConnectionDefinition.Tag.forName(reader.getLocalName()) == ConnectionDefinit...
 504.    
 505.                            return;
 506.                        } else {
 507.                            if (TimeOut.Tag.forName(reader.getLocalName()) == TimeOut.Tag.UNKNOWN) {
 508.                                throw ParseUtils.unexpectedElement(reader);
 509.                            }
 510.                        }
 511.                        break;
 512.                    }
 513.                    case START_ELEMENT: {
 514.                        String value = rawElementText(reader);
 515.                        switch (TimeOut.Tag.forName(reader.getLocalName())) {
 516.                            case ALLOCATION_RETRY: {
 517.                                ALLOCATION_RETRY.parseAndSetParameter(value, node, reader);
 518.                                break;
 519.                            }
 520.                            case ALLOCATION_RETRY_WAIT_MILLIS: {
 521.                                ALLOCATION_RETRY_WAIT_MILLIS.parseAndSetParameter(value, node, reader);
 522.                                break;
 523.                            }
 524.                            case BLOCKING_TIMEOUT_MILLIS: {
 525.                                BLOCKING_TIMEOUT_WAIT_MILLIS.parseAndSetParameter(value, node, reader);
 526.                                break;
 527.                            }
 528.                            case IDLE_TIMEOUT_MINUTES: {
 529.                                IDLETIMEOUTMINUTES.parseAndSetParameter(value, node, reader);
 530.                                break;
 531.                            }
 532.                            case XA_RESOURCE_TIMEOUT: {
 533.                                XA_RESOURCE_TIMEOUT.parseAndSetParameter(value, node, reader);
 534.                                break;
 535.                            }
 536.                            default:
 537.                                throw ParseUtils.unexpectedElement(reader);
 538.                        }
 539.                        break;
 540.                    }
 541.                }
 542.            }
 543.            throw ParseUtils.unexpectedEndElement(reader);
 544.        }
 545.    
 546.    
 547.        protected void parseAdminObjects(final XMLExtendedStreamReader reader, final Map<String, ModelNo...
 548.                throws XMLStreamException, ParserException, ValidateException {
 549.    
 550.    
 551.            final ModelNode adminObjectNode = new ModelNode();
 552.            adminObjectNode.get(OP).set(ADD);
 553.            int attributeSize = reader.getAttributeCount();
 554.    
 555.    
 556.            String poolName = null;
 557.            String jndiName = null;
 558.            for (int i = 0; i < attributeSize; i++) {
 559.                AdminObject.Attribute attribute = AdminObject.Attribute.forName(reader
 560.                        .getAttributeLocalName(i));
 561.                switch (attribute) {
 562.                    case ENABLED: {
 563.                        String value = rawAttributeText(reader, ENABLED.getXmlName());
 564.                        if (value != null) {
 565.                            ENABLED.parseAndSetParameter(value, adminObjectNode, reader);
 566.                        }
 567.                        break;
 568.                    }
 569.                    case JNDI_NAME: {
 570.                        jndiName = rawAttributeText(reader, JNDINAME.getXmlName());
 571.                        if (jndiName != null) {
 572.                            JNDINAME.parseAndSetParameter(jndiName, adminObjectNode, reader);
 573.                        }
 574.                        break;
 575.                    }
 576.                    case POOL_NAME: {
 577.                        poolName = rawAttributeText(reader, POOL_NAME_NAME);
 578.                        break;
 579.                    }
 580.                    case USE_JAVA_CONTEXT: {
 581.                        String value = rawAttributeText(reader, USE_JAVA_CONTEXT.getXmlName());
 582.                        if (value != null) {
 583.                            USE_JAVA_CONTEXT.parseAndSetParameter(value, adminObjectNode, reader);
 584.                        }
 585.                        break;
 586.                    }
 587.                    case CLASS_NAME: {
 588.                        String value = rawAttributeText(reader, CLASS_NAME.getXmlName());
 589.                        if (value != null) {
 590.                            CLASS_NAME.parseAndSetParameter(value, adminObjectNode, reader);
 591.                        }
 592.                        break;
 593.                    }
 594.                    default:
 595.                        throw ParseUtils.unexpectedAttribute(reader, i);
 596.                }
 597.            }
 598.            if (poolName == null || poolName.trim().equals("")) {
 599.                if (jndiName != null && jndiName.trim().length() != 0) {
 600.                    if (jndiName.contains("/")) {
 601.                        poolName = jndiName.substring(jndiName.lastIndexOf("/") + 1);
 602.                    } else {
 603.                        poolName = jndiName.substring(jndiName.lastIndexOf(":") + 1);
 604.                    }
 605.                } else {
 606.                    throw ParseUtils.missingRequired(reader, EnumSet.of(AdminObject.Attribute.JNDI_NAME)...
 607.    
 608.                }
 609.            }
 610.            while (reader.hasNext()) {
 611.                switch (reader.nextTag()) {
 612.                    case END_ELEMENT: {
 613.                        if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.ADMIN_OBJECT...
 614.    
 615.                            map.put(poolName, adminObjectNode);
 616.                            return;
 617.                        } else {
 618.                            if (AdminObject.Tag.forName(reader.getLocalName()) == AdminObject.Tag.UNKNOW...
 619.                                throw ParseUtils.unexpectedEndElement(reader);
 620.                            }
 621.                        }
 622.                        break;
 623.                    }
 624.                    case START_ELEMENT: {
 625.                        switch (AdminObject.Tag.forName(reader.getLocalName())) {
 626.                            case CONFIG_PROPERTY: {
 627.                                if (!configMap.containsKey(poolName)) {
 628.                                    configMap.put(poolName, new HashMap<String, ModelNode>(0));
 629.                                }
 630.                                parseConfigProperties(reader, configMap.get(poolName));
 631.                                break;
 632.                            }
 633.                            default:
 634.                                throw ParseUtils.unexpectedElement(reader);
 635.                        }
 636.                        break;
 637.                    }
 638.                }
 639.            }
 640.            throw ParseUtils.unexpectedEndElement(reader);
 641.        }
 642.    
 643.        /**
 644.         * parse a {@link XaPool} object
 645.         *
 646.         * @param reader reader
 647.         * @throws XMLStreamException XMLStreamException
 648.         * @throws ParserException
 649.         * @throws ValidateException  ValidateException
 650.         */
 651.        protected void parseXaPool(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExcep...
 652.    
 653.    
 654.            while (reader.hasNext()) {
 655.                switch (reader.nextTag()) {
 656.                    case END_ELEMENT: {
 657.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.XA_POOL)...
 658.    
 659.                            return;
 660.    
 661.                        } else {
 662.                            if (XaPool.Tag.forName(reader.getLocalName()) == XaPool.Tag.UNKNOWN) {
 663.                                throw ParseUtils.unexpectedEndElement(reader);
 664.                            }
 665.                        }
 666.                        break;
 667.                    }
 668.                    case START_ELEMENT: {
 669.                        switch (XaPool.Tag.forName(reader.getLocalName())) {
 670.                            case MAX_POOL_SIZE: {
 671.                                String value = rawElementText(reader);
 672.                                MAX_POOL_SIZE.parseAndSetParameter(value, node, reader);
 673.                                break;
 674.                            }
 675.                            case MIN_POOL_SIZE: {
 676.                                String value = rawElementText(reader);
 677.                                MIN_POOL_SIZE.parseAndSetParameter(value, node, reader);
 678.                                break;
 679.                            }
 680.                            case INITIAL_POOL_SIZE: {
 681.                                String value = rawElementText(reader);
 682.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, node, reader);
 683.                                break;
 684.                            }
 685.                            case PREFILL: {
 686.                                String value = rawElementText(reader);
 687.                                POOL_PREFILL.parseAndSetParameter(value, node, reader);
 688.                                break;
 689.                            }
 690.                            case USE_STRICT_MIN: {
 691.                                String value = rawElementText(reader);
 692.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, node, reader);
 693.                                break;
 694.                            }
 695.                            case FLUSH_STRATEGY: {
 696.                                String value = rawElementText(reader);
 697.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, node, reader);
 698.                                break;
 699.                            }
 700.                            case INTERLEAVING: {
 701.                                String value = rawElementText(reader);
 702.                                //just presence means true
 703.                                value = value == null ? "true" : value;
 704.                                INTERLEAVING.parseAndSetParameter(value, node, reader);
 705.                                break;
 706.                            }
 707.                            case IS_SAME_RM_OVERRIDE: {
 708.                                String value = rawElementText(reader);
 709.                                SAME_RM_OVERRIDE.parseAndSetParameter(value, node, reader);
 710.                                break;
 711.                            }
 712.                            case NO_TX_SEPARATE_POOLS: {
 713.                                String value = rawElementText(reader);
 714.                                //just presence means true
 715.                                value = value == null ? "true" : value;
 716.                                NOTXSEPARATEPOOL.parseAndSetParameter(value, node, reader);
 717.                                break;
 718.                            }
 719.                            case PAD_XID: {
 720.                                String value = rawElementText(reader);
 721.                                PAD_XID.parseAndSetParameter(value, node, reader);
 722.                                break;
 723.                            }
 724.                            case WRAP_XA_RESOURCE: {
 725.                                String value = rawElementText(reader);
 726.                                WRAP_XA_RESOURCE.parseAndSetParameter(value, node, reader);
 727.                                break;
 728.                            }
 729.                            case CAPACITY: {
 730.                                parseCapacity(reader, node);
 731.                                break;
 732.                            }
 733.    
 734.                            default:
 735.                                throw ParseUtils.unexpectedElement(reader);
 736.                        }
 737.                        break;
 738.                    }
 739.                }
 740.            }
 741.            throw ParseUtils.unexpectedEndElement(reader);
 742.        }
 743.    
 744.    
 745.        protected void parsePool(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExcepti...
 746.                ValidateException {
 747.    
 748.            while (reader.hasNext()) {
 749.                switch (reader.nextTag()) {
 750.                    case END_ELEMENT: {
 751.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.POOL) {
 752.    
 753.                            return;
 754.    
 755.                        } else {
 756.                            if (Pool.Tag.forName(reader.getLocalName()) == Pool.Tag.UNKNOWN) {
 757.                                throw ParseUtils.unexpectedEndElement(reader);
 758.                            }
 759.                        }
 760.                        break;
 761.                    }
 762.                    case START_ELEMENT: {
 763.                        switch (Pool.Tag.forName(reader.getLocalName())) {
 764.                            case MAX_POOL_SIZE: {
 765.                                String value = rawElementText(reader);
 766.                                MAX_POOL_SIZE.parseAndSetParameter(value, node, reader);
 767.                                break;
 768.                            }
 769.                            case INITIAL_POOL_SIZE: {
 770.                                String value = rawElementText(reader);
 771.                                INITIAL_POOL_SIZE.parseAndSetParameter(value, node, reader);
 772.                                break;
 773.                            }
 774.                            case MIN_POOL_SIZE: {
 775.                                String value = rawElementText(reader);
 776.                                MIN_POOL_SIZE.parseAndSetParameter(value, node, reader);
 777.                                break;
 778.                            }
 779.                            case PREFILL: {
 780.                                String value = rawElementText(reader);
 781.                                POOL_PREFILL.parseAndSetParameter(value, node, reader);
 782.                                break;
 783.                            }
 784.                            case USE_STRICT_MIN: {
 785.                                String value = rawElementText(reader);
 786.                                POOL_USE_STRICT_MIN.parseAndSetParameter(value, node, reader);
 787.                                break;
 788.                            }
 789.                            case FLUSH_STRATEGY: {
 790.                                String value = rawElementText(reader);
 791.                                POOL_FLUSH_STRATEGY.parseAndSetParameter(value, node, reader);
 792.                                break;
 793.                            }
 794.                            case CAPACITY: {
 795.                                parseCapacity(reader, node);
 796.                                break;
 797.                            }
 798.                            default:
 799.                                throw ParseUtils.unexpectedElement(reader);
 800.                        }
 801.                        break;
 802.                    }
 803.                }
 804.            }
 805.            throw ParseUtils.unexpectedEndElement(reader);
 806.        }
 807.    
 808.        private void parseCapacity(XMLExtendedStreamReader reader, final ModelNode operation) throws XML...
 809.                ValidateException {
 810.    
 811.            while (reader.hasNext()) {
 812.                switch (reader.nextTag()) {
 813.                    case END_ELEMENT: {
 814.                        if (DsPool.Tag.forName(reader.getLocalName()) == DsPool.Tag.CAPACITY) {
 815.    
 816.                            return;
 817.                        } else {
 818.                            if (Capacity.Tag.forName(reader.getLocalName()) == Capacity.Tag.UNKNOWN) {
 819.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 820.                            }
 821.                        }
 822.                        break;
 823.                    }
 824.                    case START_ELEMENT: {
 825.                        switch (Capacity.Tag.forName(reader.getLocalName())) {
 826.                            case INCREMENTER: {
 827.                                parseExtension(reader, reader.getLocalName(), operation, CAPACITY_INCREM...
 828.                                break;
 829.                            }
 830.                            case DECREMENTER: {
 831.                                parseExtension(reader, reader.getLocalName(), operation, CAPACITY_DECREM...
 832.                                break;
 833.                            }
 834.    
 835.                            default:
 836.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 837.                        }
 838.                        break;
 839.                    }
 840.                }
 841.            }
 842.            throw new ParserException(bundle.unexpectedEndOfDocument());
 843.        }
 844.    
 845.        protected void parseRecovery(XMLExtendedStreamReader reader, ModelNode node) throws XMLStreamExc...
 846.                ValidateException {
 847.    
 848.    
 849.            for (Recovery.Attribute attribute : Recovery.Attribute.values()) {
 850.                switch (attribute) {
 851.                    case NO_RECOVERY: {
 852.                        String value = rawAttributeText(reader, NO_RECOVERY.getXmlName());
 853.                        if (value != null) {
 854.                            NO_RECOVERY.parseAndSetParameter(value, node, reader);
 855.                        }
 856.                        break;
 857.                    }
 858.                    default:
 859.                        break;
 860.                }
 861.            }
 862.    
 863.            while (reader.hasNext()) {
 864.                switch (reader.nextTag()) {
 865.                    case END_ELEMENT: {
 866.                        if (XaDataSource.Tag.forName(reader.getLocalName()) == XaDataSource.Tag.RECOVERY...
 867.                            return;
 868.                        } else {
 869.                            if (Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.UNKNOWN) {
 870.                                throw ParseUtils.unexpectedEndElement(reader);
 871.                            }
 872.                        }
 873.                        break;
 874.                    }
 875.                    case START_ELEMENT: {
 876.                        Recovery.Tag tag = Recovery.Tag.forName(reader.getLocalName());
 877.                        switch (tag) {
 878.                            case RECOVER_CREDENTIAL: {
 879.                                parseRecoveryCredential(reader, node);
 880.                                break;
 881.                            }
 882.                            case RECOVER_PLUGIN: {
 883.                                parseExtension(reader, tag.getLocalName(), node, RECOVERLUGIN_CLASSNAME,...
 884.                                break;
 885.                            }
 886.                            default:
 887.                                throw ParseUtils.unexpectedElement(reader);
 888.                        }
 889.                        break;
 890.                    }
 891.                }
 892.            }
 893.            throw ParseUtils.unexpectedEndElement(reader);
 894.        }
 895.    
 896.    
 897.    
 898.        private void parseSecuritySettings(XMLExtendedStreamReader reader, ModelNode node) throws XMLStr...
 899.                ValidateException {
 900.    
 901.            boolean securtyDomainMatched = false;
 902.            while (reader.hasNext()) {
 903.                switch (reader.nextTag()) {
 904.                    case END_ELEMENT: {
 905.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY) {
 906.    
 907.                            return;
 908.                        } else {
 909.                            if (Security.Tag.forName(reader.getLocalName()) == Security.Tag.UNKNOWN) {
 910.                                throw ParseUtils.unexpectedEndElement(reader);
 911.                            }
 912.                        }
 913.                        break;
 914.                    }
 915.                    case START_ELEMENT: {
 916.                        switch (Security.Tag.forName(reader.getLocalName())) {
 917.    
 918.                            case SECURITY_DOMAIN: {
 919.                                if (securtyDomainMatched) {
 920.                                    throw ParseUtils.unexpectedElement(reader);
 921.                                }
 922.                                String value = rawElementText(reader);
 923.                                SECURITY_DOMAIN.parseAndSetParameter(value, node, reader);
 924.                                securtyDomainMatched = true;
 925.                                break;
 926.                            }
 927.                            case SECURITY_DOMAIN_AND_APPLICATION: {
 928.                                String value = rawElementText(reader);
 929.                                SECURITY_DOMAIN_AND_APPLICATION.parseAndSetParameter(value, node, reader...
 930.                                break;
 931.                            }
 932.                            case APPLICATION: {
 933.                                String value = rawElementText(reader);
 934.                                //just presence means true
 935.                                value = value == null ? "true" : value;
 936.                                APPLICATION.parseAndSetParameter(value, node, reader);
 937.                                break;
 938.                            }
 939.                            default:
 940.                                throw ParseUtils.unexpectedElement(reader);
 941.                        }
 942.                        break;
 943.                    }
 944.                }
 945.            }
 946.            throw ParseUtils.unexpectedEndElement(reader);
 947.        }
 948.    
 949.        private void parseRecoveryCredential(XMLExtendedStreamReader reader, ModelNode node) throws XMLS...
 950.                ValidateException {
 951.    
 952.    
 953.            while (reader.hasNext()) {
 954.                switch (reader.nextTag()) {
 955.                    case END_ELEMENT: {
 956.                        if (DataSource.Tag.forName(reader.getLocalName()) == DataSource.Tag.SECURITY ||
 957.                                Recovery.Tag.forName(reader.getLocalName()) == Recovery.Tag.RECOVER_CRED...
 958.    
 959.                            return;
 960.                        } else {
 961.                            if (Credential.Tag.forName(reader.getLocalName()) == Credential.Tag.UNKNOWN)...
 962.                                throw ParseUtils.unexpectedEndElement(reader);
 963.                            }
 964.                        }
 965.                        break;
 966.                    }
 967.                    case START_ELEMENT: {
 968.                        switch (Credential.Tag.forName(reader.getLocalName())) {
 969.                            case PASSWORD: {
 970.                                String value = rawElementText(reader);
 971.                                RECOVERY_PASSWORD.parseAndSetParameter(value, node, reader);
 972.                                break;
 973.                            }
 974.                            case USER_NAME: {
 975.                                String value = rawElementText(reader);
 976.                                RECOVERY_USERNAME.parseAndSetParameter(value, node, reader);
 977.                                break;
 978.                            }
 979.                            case SECURITY_DOMAIN: {
 980.                                String value = rawElementText(reader);
 981.                                RECOVERY_SECURITY_DOMAIN.parseAndSetParameter(value, node, reader);
 982.                                break;
 983.                            }
 984.                            default:
 985.                                throw ParseUtils.unexpectedElement(reader);
 986.                        }
 987.                        break;
 988.                    }
 989.                }
 990.            }
 991.            throw ParseUtils.unexpectedEndElement(reader);
 992.        }
 993.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.resourceadapters;
  23.    
  24.    
  25.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  26.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  27.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ADMIN_OBJECTS_NAME;
  28.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ARCHIVE;
  29.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATIONGROUP;
  30.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATION_GROUPS;
  31.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BOOTSTRAP_CONTEXT;
  32.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONFIG_PROPERTIES;
  33.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONNECTIONDEFINITIONS_NAM...
  34.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.MODULE;
  35.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RESOURCEADAPTER_NAME;
  36.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.STATISTICS_ENABLED;
  37.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.TRANSACTION_SUPPORT;
  38.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY;
  39.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP...
  40.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP...
  41.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_PRINC...
  42.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DOMAIN;
  43.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_FROM;...
  44.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_GROUP...
  45.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_REQUI...
  46.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_TO;
  47.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_USERS...
  48.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
  49.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
  50.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
  51.    
  52.    import java.util.HashMap;
  53.    import java.util.List;
  54.    import java.util.Map;
  55.    
  56.    import javax.xml.stream.XMLStreamException;
  57.    import javax.xml.stream.XMLStreamReader;
  58.    
  59.    import org.jboss.as.connector.util.ParserException;
  60.    import org.jboss.dmr.ModelNode;
  61.    import org.jboss.jca.common.CommonBundle;
  62.    import org.jboss.jca.common.api.metadata.common.TransactionSupportEnum;
  63.    import org.jboss.jca.common.api.metadata.resourceadapter.Activation;
  64.    import org.jboss.jca.common.api.metadata.resourceadapter.Activations;
  65.    import org.jboss.jca.common.api.metadata.resourceadapter.WorkManager;
  66.    import org.jboss.jca.common.api.metadata.resourceadapter.WorkManagerSecurity;
  67.    import org.jboss.jca.common.api.validator.ValidateException;
  68.    import org.jboss.jca.common.metadata.resourceadapter.WorkManagerImpl;
  69.    import org.jboss.jca.common.metadata.resourceadapter.WorkManagerSecurityImpl;
  70.    import org.jboss.logging.Messages;
  71.    import org.jboss.staxmapper.XMLExtendedStreamReader;
  72.    
  73.    /**
  74.     * A ResourceAdapterParserr.
  75.     *
  76.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
  77.     */
  78.    public class ResourceAdapterParser extends CommonIronJacamarParser {
  79.        /**
  80.         * The bundle
  81.         */
  82.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
  83.    
  84.    
  85.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
  86.    
  87.            Activations adapters = null;
  88.    
  89.    
  90.            //iterate over tags
  91.            int iterate;
  92.            try {
  93.                iterate = reader.nextTag();
  94.            } catch (XMLStreamException e) {
  95.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
  96.                iterate = reader.nextTag();
  97.            }
  98.            switch (iterate) {
  99.                case END_ELEMENT: {
 100.                    // should mean we're done, so ignore it.
 101.                    break;
 102.                }
 103.                case START_ELEMENT: {
 104.    
 105.                    switch (Tag.forName(reader.getLocalName())) {
 106.                        case RESOURCE_ADAPTERS: {
 107.                            parseResourceAdapters(reader, list, parentAddress);
 108.                            break;
 109.                        }
 110.                        default:
 111.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 112.                    }
 113.    
 114.                    break;
 115.                }
 116.                default:
 117.                    throw new IllegalStateException();
 118.            }
 119.    
 120.            return;
 121.    
 122.        }
 123.    
 124.        private void parseResourceAdapters(final XMLExtendedStreamReader reader, final List<ModelNode> l...
 125.                ValidateException {
 126.            while (reader.hasNext()) {
 127.                switch (reader.nextTag()) {
 128.                    case END_ELEMENT: {
 129.                        if (Tag.forName(reader.getLocalName()) == Tag.RESOURCE_ADAPTERS) {
 130.                            return;
 131.                        } else {
 132.                            if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.UNKNOW...
 133.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 134.                            }
 135.                        }
 136.                        break;
 137.                    }
 138.                    case START_ELEMENT: {
 139.                        switch (Activations.Tag.forName(reader.getLocalName())) {
 140.                            case RESOURCE_ADAPTER: {
 141.                                parseResourceAdapter(reader, list, parentAddress);
 142.                                break;
 143.                            }
 144.                            default:
 145.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 146.                        }
 147.                        break;
 148.                    }
 149.                }
 150.            }
 151.            throw new ParserException(bundle.unexpectedEndOfDocument());
 152.        }
 153.    
 154.        private void parseResourceAdapter(final XMLExtendedStreamReader reader, final List<ModelNode> li...
 155.                ValidateException {
 156.            final ModelNode raAddress = parentAddress.clone();
 157.            final ModelNode operation = new ModelNode();
 158.            operation.get(OP).set(ADD);
 159.    
 160.            String archiveOrModuleName = null;
 161.            HashMap<String, ModelNode> configPropertiesOperations = new HashMap<String, ModelNode>();
 162.            HashMap<String, ModelNode> connectionDefinitionsOperations = new HashMap<String, ModelNode>(...
 163.            HashMap<String, HashMap<String, ModelNode>> cfConfigPropertiesOperations = new HashMap<Strin...
 164.    
 165.            HashMap<String, ModelNode> adminObjectsOperations = new HashMap<String, ModelNode>();
 166.            HashMap<String, HashMap<String, ModelNode>> aoConfigPropertiesOperations = new HashMap<Strin...
 167.    
 168.    
 169.            boolean archiveOrModuleMatched = false;
 170.            boolean txSupportMatched = false;
 171.            boolean isXa = false;
 172.            String id = null;
 173.    
 174.            int attributeSize = reader.getAttributeCount();
 175.    
 176.                    for (int i = 0; i < attributeSize; i++) {
 177.                        Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
 178.                        String value = reader.getAttributeValue(i);
 179.                        switch (attribute) {
 180.                            case ID: {
 181.                                id = value;
 182.                                break;
 183.                            }
 184.                            case STATISTICS_ENABLED:
 185.                                STATISTICS_ENABLED.parseAndSetParameter(value, operation, reader);
 186.                                break;
 187.                            default:
 188.                                break;
 189.                        }
 190.                    }
 191.    
 192.    
 193.            while (reader.hasNext()) {
 194.                switch (reader.nextTag()) {
 195.                    case END_ELEMENT: {
 196.                        if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.RESOURCE_A...
 197.                            if (!archiveOrModuleMatched) {
 198.                                throw new ParserException(bundle.requiredElementMissing(ARCHIVE.getName(...
 199.    
 200.                            }
 201.    
 202.                            if (id != null) {
 203.                                raAddress.add(RESOURCEADAPTER_NAME, id);
 204.                            } else {
 205.                                raAddress.add(RESOURCEADAPTER_NAME, archiveOrModuleName);
 206.                            }
 207.    
 208.                            raAddress.protect();
 209.    
 210.                            operation.get(OP_ADDR).set(raAddress);
 211.                            list.add(operation);
 212.    
 213.                            for (Map.Entry<String, ModelNode> entry : configPropertiesOperations.entrySe...
 214.                                final ModelNode env = raAddress.clone();
 215.                                env.add(CONFIG_PROPERTIES.getName(), entry.getKey());
 216.                                env.protect();
 217.    
 218.                                entry.getValue().get(OP_ADDR).set(env);
 219.                                list.add(entry.getValue());
 220.                            }
 221.    
 222.                            for (Map.Entry<String, ModelNode> entry : connectionDefinitionsOperations.en...
 223.                                final ModelNode env = raAddress.clone();
 224.                                env.add(CONNECTIONDEFINITIONS_NAME, entry.getKey());
 225.                                env.protect();
 226.    
 227.                                entry.getValue().get(OP_ADDR).set(env);
 228.                                list.add(entry.getValue());
 229.    
 230.                                final HashMap<String, ModelNode> properties = cfConfigPropertiesOperatio...
 231.                                if (properties != null) {
 232.                                    for (Map.Entry<String, ModelNode> configEntry : properties.entrySet(...
 233.                                        final ModelNode configEnv = env.clone();
 234.                                        configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())...
 235.                                        configEnv.protect();
 236.    
 237.                                        configEntry.getValue().get(OP_ADDR).set(configEnv);
 238.                                        list.add(configEntry.getValue());
 239.                                    }
 240.                                }
 241.                            }
 242.    
 243.                            for (Map.Entry<String, ModelNode> entry : adminObjectsOperations.entrySet())...
 244.                                final ModelNode env = raAddress.clone();
 245.                                env.add(ADMIN_OBJECTS_NAME, entry.getKey());
 246.                                env.protect();
 247.    
 248.                                entry.getValue().get(OP_ADDR).set(env);
 249.                                list.add(entry.getValue());
 250.    
 251.                                final HashMap<String, ModelNode> aoProperties = aoConfigPropertiesOperat...
 252.                                if (aoProperties != null) {
 253.                                    for (Map.Entry<String, ModelNode> configEntry : aoProperties.entrySe...
 254.                                        final ModelNode configEnv = env.clone();
 255.                                        configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())...
 256.                                        configEnv.protect();
 257.    
 258.                                        configEntry.getValue().get(OP_ADDR).set(configEnv);
 259.                                        list.add(configEntry.getValue());
 260.                                    }
 261.                                }
 262.                            }
 263.    
 264.    
 265.                            return;
 266.    
 267.                        } else {
 268.                            if (AS7ResourceAdapterTags.forName(reader.getLocalName()) == AS7ResourceAdap...
 269.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 270.                            }
 271.                        }
 272.                        break;
 273.                    }
 274.                    case START_ELEMENT: {
 275.                        switch (AS7ResourceAdapterTags.forName(reader.getLocalName())) {
 276.                            case ADMIN_OBJECTS:
 277.                            case CONNECTION_DEFINITIONS:
 278.                            case BEAN_VALIDATION_GROUPS: {
 279.                                //ignore it,we will parse bean-validation-group,admin_object and connect...
 280.                                break;
 281.                            }
 282.                            case ADMIN_OBJECT: {
 283.                                parseAdminObjects(reader, adminObjectsOperations, aoConfigPropertiesOper...
 284.                                break;
 285.                            }
 286.    
 287.                            case CONNECTION_DEFINITION: {
 288.                                switch (org.jboss.as.connector.subsystems.resourceadapters.Namespace.for...
 289.                                    case RESOURCEADAPTERS_1_0:
 290.                                    case RESOURCEADAPTERS_1_1:
 291.                                    case RESOURCEADAPTERS_2_0:
 292.                                        parseConnectionDefinitions_1_0(reader, connectionDefinitionsOper...
 293.                                        break;
 294.                                    case RESOURCEADAPTERS_3_0:
 295.                                        parseConnectionDefinitions_3_0(reader, connectionDefinitionsOper...
 296.                                        break;
 297.                                }
 298.                                break;
 299.                            }
 300.                            case BEAN_VALIDATION_GROUP: {
 301.                                String value = rawElementText(reader);
 302.                                operation.get(BEANVALIDATION_GROUPS.getName()).add(BEANVALIDATIONGROUP.p...
 303.                                break;
 304.                            }
 305.                            case BOOTSTRAP_CONTEXT: {
 306.                                String value = rawElementText(reader);
 307.                                BOOTSTRAP_CONTEXT.parseAndSetParameter(value, operation, reader);
 308.                                break;
 309.                            }
 310.                            case CONFIG_PROPERTY: {
 311.                                parseConfigProperties(reader, configPropertiesOperations);
 312.                                break;
 313.    
 314.                            }
 315.                            case TRANSACTION_SUPPORT: {
 316.                                if (txSupportMatched) {
 317.                                    throw new ParserException(bundle.unexpectedElement(TRANSACTION_SUPPO...
 318.                                }
 319.                                String value = rawElementText(reader);
 320.                                TRANSACTION_SUPPORT.parseAndSetParameter(value, operation, reader);
 321.                                isXa = value != null && TransactionSupportEnum.valueOf(value) == Transac...
 322.                                txSupportMatched = true;
 323.                                break;
 324.                            }
 325.                            case WORKMANAGER: {
 326.                                parseWorkManager(operation, reader);
 327.                                break;
 328.                            }
 329.                            case ARCHIVE: {
 330.                                if (archiveOrModuleMatched) {
 331.                                    throw new ParserException(bundle.unexpectedElement(ARCHIVE.getXmlNam...
 332.                                }
 333.                                archiveOrModuleName = rawElementText(reader);
 334.                                ARCHIVE.parseAndSetParameter(archiveOrModuleName, operation, reader);
 335.                                archiveOrModuleMatched = true;
 336.                                break;
 337.                            }
 338.                            case MODULE: {
 339.                                if (archiveOrModuleMatched) {
 340.                                    throw new ParserException(bundle.unexpectedElement(MODULE.getXmlName...
 341.                                }
 342.    
 343.                                String moduleId = rawAttributeText(reader, "id");
 344.                                String moduleSlot = rawAttributeText(reader, "slot", "main");
 345.                                archiveOrModuleName = moduleId + ":" + moduleSlot;
 346.                                MODULE.parseAndSetParameter(archiveOrModuleName, operation, reader);
 347.    
 348.                                archiveOrModuleMatched = true;
 349.                                break;
 350.                            }
 351.                            default:
 352.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 353.                        }
 354.                        break;
 355.                    }
 356.                }
 357.            }
 358.    
 359.            throw new ParserException(bundle.unexpectedEndOfDocument());
 360.        }
 361.    
 362.        protected WorkManager parseWorkManager(final ModelNode operation, final XMLStreamReader reader) ...
 363.                ValidateException {
 364.            WorkManagerSecurity security = null;
 365.    
 366.            while (reader.hasNext()) {
 367.                switch (reader.nextTag()) {
 368.                    case END_ELEMENT: {
 369.                        if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.WORKMANAGER)...
 370.                            return new WorkManagerImpl(security);
 371.                        } else {
 372.                            if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.UNKNOWN)...
 373.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 374.                            }
 375.                        }
 376.                        break;
 377.                    }
 378.                    case START_ELEMENT: {
 379.                        switch (WorkManager.Tag.forName(reader.getLocalName())) {
 380.                            case SECURITY: {
 381.                                WM_SECURITY.parseAndSetParameter("true", operation, reader);
 382.                                security = parseWorkManagerSecurity(operation, reader);
 383.                                break;
 384.                            }
 385.                            default:
 386.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 387.                        }
 388.                        break;
 389.                    }
 390.                }
 391.            }
 392.            throw new ParserException(bundle.unexpectedEndOfDocument());
 393.        }
 394.    
 395.        protected WorkManagerSecurity parseWorkManagerSecurity(final ModelNode operation, final XMLStrea...
 396.                ParserException, ValidateException {
 397.            boolean mappingRequired = false;
 398.            String domain = null;
 399.            String defaultPrincipal = null;
 400.            List<String> defaultGroups = null;
 401.            Map<String, String> userMappings = null;
 402.            Map<String, String> groupMappings = null;
 403.    
 404.            boolean userMappingEnabled = false;
 405.    
 406.            while (reader.hasNext()) {
 407.                switch (reader.nextTag()) {
 408.                    case END_ELEMENT: {
 409.                        if (WorkManager.Tag.forName(reader.getLocalName()) == WorkManager.Tag.SECURITY) ...
 410.                            return new WorkManagerSecurityImpl(mappingRequired, domain,
 411.                                    defaultPrincipal, defaultGroups,
 412.                                    userMappings, groupMappings);
 413.                        } else {
 414.                            if (WorkManagerSecurity.Tag.forName(reader.getLocalName()) == WorkManagerSec...
 415.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 416.                            }
 417.                        }
 418.                        break;
 419.                    }
 420.                    case START_ELEMENT: {
 421.                        switch (WorkManagerSecurity.Tag.forName(reader.getLocalName())) {
 422.                            case DEFAULT_GROUPS:
 423.                            case MAPPINGS: {
 424.                                // Skip
 425.                                break;
 426.                            }
 427.                            case MAPPING_REQUIRED: {
 428.                                String value = rawElementText(reader);
 429.                                WM_SECURITY_MAPPING_REQUIRED.parseAndSetParameter(value, operation, read...
 430.                                break;
 431.                            }
 432.                            case DOMAIN: {
 433.                                String value = rawElementText(reader);
 434.                                WM_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case DEFAULT_PRINCIPAL: {
 438.                                String value = rawElementText(reader);
 439.                                WM_SECURITY_DEFAULT_PRINCIPAL.parseAndSetParameter(value, operation, rea...
 440.                                break;
 441.                            }
 442.                            case GROUP: {
 443.                                String value = rawElementText(reader);
 444.                                operation.get(WM_SECURITY_DEFAULT_GROUPS.getName()).add(WM_SECURITY_DEFA...
 445.                                break;
 446.                            }
 447.                            case USERS: {
 448.                                userMappingEnabled = true;
 449.                                break;
 450.                            }
 451.                            case GROUPS: {
 452.                                userMappingEnabled = false;
 453.                                break;
 454.                            }
 455.                            case MAP: {
 456.                                if (userMappingEnabled) {
 457.                                    String from = rawAttributeText(reader, WorkManagerSecurity.Attribute...
 458.                                    if (from == null || from.trim().equals(""))
 459.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 460.                                    String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T...
 461.                                    if (to == null || to.trim().equals(""))
 462.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 463.                                    ModelNode object = new ModelNode();
 464.                                    WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);...
 465.                                    WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
 466.                                    operation.get(WM_SECURITY_MAPPING_USERS.getName()).add(object);
 467.                                } else {
 468.                                    String from = rawAttributeText(reader, WorkManagerSecurity.Attribute...
 469.                                    if (from == null || from.trim().equals(""))
 470.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 471.                                    String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T...
 472.                                    if (to == null || to.trim().equals(""))
 473.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 474.                                    ModelNode object = new ModelNode();
 475.                                    WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);...
 476.                                    WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
 477.                                    operation.get(WM_SECURITY_MAPPING_GROUPS.getName()).add(object);
 478.                                }
 479.                                break;
 480.                            }
 481.                            default:
 482.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 483.                        }
 484.                        break;
 485.                    }
 486.                }
 487.            }
 488.            throw new ParserException(bundle.unexpectedEndOfDocument());
 489.        }
 490.    
 491.    
 492.        /**
 493.         * A Tag.
 494.         *
 495.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 496.         */
 497.        public enum Tag {
 498.            /**
 499.             * always first
 500.             */
 501.            UNKNOWN(null),
 502.    
 503.            /**
 504.             * jboss-ra tag name
 505.             */
 506.            RESOURCE_ADAPTERS("resource-adapters");
 507.    
 508.            private final String name;
 509.    
 510.            /**
 511.             * Create a new Tag.
 512.             *
 513.             * @param name a name
 514.             */
 515.            Tag(final String name) {
 516.                this.name = name;
 517.            }
 518.    
 519.            /**
 520.             * Get the local name of this element.
 521.             *
 522.             * @return the local name
 523.             */
 524.            public String getLocalName() {
 525.                return name;
 526.            }
 527.    
 528.            private static final Map<String, Tag> MAP;
 529.    
 530.            static {
 531.                final Map<String, Tag> map = new HashMap<String, Tag>();
 532.                for (Tag element : values()) {
 533.                    final String name = element.getLocalName();
 534.                    if (name != null)
 535.                        map.put(name, element);
 536.                }
 537.                MAP = map;
 538.            }
 539.    
 540.            /**
 541.             * Static method to get enum instance given localName string
 542.             *
 543.             * @param localName a string used as localname (typically tag name as defined in xsd)
 544.             * @return the enum instance
 545.             */
 546.            public static Tag forName(String localName) {
 547.                final Tag element = MAP.get(localName);
 548.                return element == null ? UNKNOWN : element;
 549.            }
 550.    
 551.        }
 552.    
 553.        /**
 554.         * An Attribute.
 555.         *
 556.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 557.         */
 558.        public enum Attribute {
 559.    
 560.            /**
 561.             * always first
 562.             */
 563.            UNKNOWN(null),
 564.            /**
 565.             * id attribute
 566.             */
 567.            ID("id"),
 568.            /**
 569.             * statistics-enabled attribute
 570.             */
 571.            STATISTICS_ENABLED("statistics-enabled"),;
 572.    
 573.            private String name;
 574.    
 575.            /**
 576.             * Create a new Tag.
 577.             *
 578.             * @param name a name
 579.             */
 580.            Attribute(final String name) {
 581.                this.name = name;
 582.            }
 583.    
 584.            /**
 585.             * Get the local name of this element.
 586.             *
 587.             * @return the local name
 588.             */
 589.            public String getLocalName() {
 590.                return name;
 591.            }
 592.    
 593.            /**
 594.             * {@inheritDoc}
 595.             */
 596.            public String toString() {
 597.                return name;
 598.            }
 599.    
 600.            private static final Map<String, Attribute> MAP;
 601.    
 602.            static {
 603.                final Map<String, Attribute> map = new HashMap<String, Attribute>();
 604.                for (Attribute element : values()) {
 605.                    final String name = element.getLocalName();
 606.                    if (name != null)
 607.                        map.put(name, element);
 608.                }
 609.                MAP = map;
 610.            }
 611.    
 612.            /**
 613.             * Set the value
 614.             *
 615.             * @param v The name
 616.             * @return The value
 617.             */
 618.            Attribute value(String v) {
 619.                name = v;
 620.                return this;
 621.            }
 622.    
 623.            /**
 624.             * Static method to get enum instance given localName XsdString
 625.             *
 626.             * @param localName a XsdString used as localname (typically tag name as defined in xsd)
 627.             * @return the enum instance
 628.             */
 629.            public static Attribute forName(String localName) {
 630.                final Attribute element = MAP.get(localName);
 631.                return element == null ? UNKNOWN.value(localName) : element;
 632.            }
 633.    
 634.        }
 635.    
 636.    }
   1.    /*
   2.     * JBoss, Home of Professional Open Source.
   3.     * Copyright 2008, Red Hat Middleware LLC, and individual contributors
   4.     * as indicated by the @author tags. See the copyright.txt file in the
   5.     * distribution for a full listing of individual contributors.
   6.     *
   7.     * This is free software; you can redistribute it and/or modify it
   8.     * under the terms of the GNU Lesser General Public License as
   9.     * published by the Free Software Foundation; either version 2.1 of
  10.     * the License, or (at your option) any later version.
  11.     *
  12.     * This software is distributed in the hope that it will be useful,
  13.     * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14.     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15.     * Lesser General Public License for more details.
  16.     *
  17.     * You should have received a copy of the GNU Lesser General Public
  18.     * License along with this software; if not, write to the Free
  19.     * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  20.     * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  21.     */
  22.    package org.jboss.as.connector.subsystems.resourceadapters;
  23.    
  24.    
  25.    import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
  26.    import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
  27.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ADMIN_OBJECTS_NAME;
  28.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.ARCHIVE;
  29.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATIONGROUP;
  30.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BEANVALIDATION_GROUPS;
  31.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.BOOTSTRAP_CONTEXT;
  32.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONFIG_PROPERTIES;
  33.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.CONNECTIONDEFINITIONS_NAM...
  34.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.MODULE;
  35.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.RESOURCEADAPTER_NAME;
  36.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.STATISTICS_ENABLED;
  37.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.TRANSACTION_SUPPORT;
  38.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY;
  39.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP...
  40.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_GROUP...
  41.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DEFAULT_PRINC...
  42.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_DOMAIN;
  43.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_FROM;...
  44.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_GROUP...
  45.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_REQUI...
  46.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_TO;
  47.    import static org.jboss.as.connector.subsystems.resourceadapters.Constants.WM_SECURITY_MAPPING_USERS...
  48.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD;
  49.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP;
  50.    import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR;
  51.    
  52.    import java.util.HashMap;
  53.    import java.util.List;
  54.    import java.util.Map;
  55.    
  56.    import javax.xml.stream.XMLStreamException;
  57.    import javax.xml.stream.XMLStreamReader;
  58.    
  59.    import org.jboss.as.connector.util.ParserException;
  60.    import org.jboss.dmr.ModelNode;
  61.    import org.jboss.jca.common.CommonBundle;
  62.    import org.jboss.jca.common.api.metadata.common.TransactionSupportEnum;
  63.    import org.jboss.jca.common.api.metadata.resourceadapter.Activation;
  64.    import org.jboss.jca.common.api.metadata.resourceadapter.Activations;
  65.    import org.jboss.jca.common.api.metadata.resourceadapter.WorkManager;
  66.    import org.jboss.jca.common.api.metadata.resourceadapter.WorkManagerSecurity;
  67.    import org.jboss.jca.common.api.validator.ValidateException;
  68.    import org.jboss.jca.common.metadata.resourceadapter.WorkManagerImpl;
  69.    import org.jboss.jca.common.metadata.resourceadapter.WorkManagerSecurityImpl;
  70.    import org.jboss.logging.Messages;
  71.    import org.jboss.staxmapper.XMLExtendedStreamReader;
  72.    
  73.    /**
  74.     * A ResourceAdapterParserr.
  75.     *
  76.     * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
  77.     */
  78.    public class ResourceAdapterParser extends CommonIronJacamarParser {
  79.        /**
  80.         * The bundle
  81.         */
  82.        private static CommonBundle bundle = Messages.getBundle(CommonBundle.class);
  83.    
  84.    
  85.        public void parse(final XMLExtendedStreamReader reader, final List<ModelNode> list, ModelNode pa...
  86.    
  87.            Activations adapters = null;
  88.    
  89.    
  90.            //iterate over tags
  91.            int iterate;
  92.            try {
  93.                iterate = reader.nextTag();
  94.            } catch (XMLStreamException e) {
  95.                //founding a non tag..go on. Normally non-tag found at beginning are comments or DTD dec...
  96.                iterate = reader.nextTag();
  97.            }
  98.            switch (iterate) {
  99.                case END_ELEMENT: {
 100.                    // should mean we're done, so ignore it.
 101.                    break;
 102.                }
 103.                case START_ELEMENT: {
 104.    
 105.                    switch (Tag.forName(reader.getLocalName())) {
 106.                        case RESOURCE_ADAPTERS: {
 107.                            parseResourceAdapters(reader, list, parentAddress);
 108.                            break;
 109.                        }
 110.                        default:
 111.                            throw new ParserException(bundle.unexpectedElement(reader.getLocalName()));
 112.                    }
 113.    
 114.                    break;
 115.                }
 116.                default:
 117.                    throw new IllegalStateException();
 118.            }
 119.    
 120.            return;
 121.    
 122.        }
 123.    
 124.        private void parseResourceAdapters(final XMLExtendedStreamReader reader, final List<ModelNode> l...
 125.                ValidateException {
 126.            while (reader.hasNext()) {
 127.                switch (reader.nextTag()) {
 128.                    case END_ELEMENT: {
 129.                        if (Tag.forName(reader.getLocalName()) == Tag.RESOURCE_ADAPTERS) {
 130.                            return;
 131.                        } else {
 132.                            if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.UNKNOW...
 133.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 134.                            }
 135.                        }
 136.                        break;
 137.                    }
 138.                    case START_ELEMENT: {
 139.                        switch (Activations.Tag.forName(reader.getLocalName())) {
 140.                            case RESOURCE_ADAPTER: {
 141.                                parseResourceAdapter(reader, list, parentAddress);
 142.                                break;
 143.                            }
 144.                            default:
 145.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 146.                        }
 147.                        break;
 148.                    }
 149.                }
 150.            }
 151.            throw new ParserException(bundle.unexpectedEndOfDocument());
 152.        }
 153.    
 154.        private void parseResourceAdapter(final XMLExtendedStreamReader reader, final List<ModelNode> li...
 155.                ValidateException {
 156.            final ModelNode raAddress = parentAddress.clone();
 157.            final ModelNode operation = new ModelNode();
 158.            operation.get(OP).set(ADD);
 159.    
 160.            String archiveOrModuleName = null;
 161.            HashMap<String, ModelNode> configPropertiesOperations = new HashMap<String, ModelNode>();
 162.            HashMap<String, ModelNode> connectionDefinitionsOperations = new HashMap<String, ModelNode>(...
 163.            HashMap<String, HashMap<String, ModelNode>> cfConfigPropertiesOperations = new HashMap<Strin...
 164.    
 165.            HashMap<String, ModelNode> adminObjectsOperations = new HashMap<String, ModelNode>();
 166.            HashMap<String, HashMap<String, ModelNode>> aoConfigPropertiesOperations = new HashMap<Strin...
 167.    
 168.    
 169.            boolean archiveOrModuleMatched = false;
 170.            boolean txSupportMatched = false;
 171.            boolean isXa = false;
 172.            String id = null;
 173.    
 174.            int attributeSize = reader.getAttributeCount();
 175.    
 176.                    for (int i = 0; i < attributeSize; i++) {
 177.                        Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
 178.                        String value = reader.getAttributeValue(i);
 179.                        switch (attribute) {
 180.                            case ID: {
 181.                                id = value;
 182.                                break;
 183.                            }
 184.                            case STATISTICS_ENABLED:
 185.                                STATISTICS_ENABLED.parseAndSetParameter(value, operation, reader);
 186.                                break;
 187.                            default:
 188.                                break;
 189.                        }
 190.                    }
 191.    
 192.    
 193.            while (reader.hasNext()) {
 194.                switch (reader.nextTag()) {
 195.                    case END_ELEMENT: {
 196.                        if (Activations.Tag.forName(reader.getLocalName()) == Activations.Tag.RESOURCE_A...
 197.                            if (!archiveOrModuleMatched) {
 198.                                throw new ParserException(bundle.requiredElementMissing(ARCHIVE.getName(...
 199.    
 200.                            }
 201.    
 202.                            if (id != null) {
 203.                                raAddress.add(RESOURCEADAPTER_NAME, id);
 204.                            } else {
 205.                                raAddress.add(RESOURCEADAPTER_NAME, archiveOrModuleName);
 206.                            }
 207.    
 208.                            raAddress.protect();
 209.    
 210.                            operation.get(OP_ADDR).set(raAddress);
 211.                            list.add(operation);
 212.    
 213.                            for (Map.Entry<String, ModelNode> entry : configPropertiesOperations.entrySe...
 214.                                final ModelNode env = raAddress.clone();
 215.                                env.add(CONFIG_PROPERTIES.getName(), entry.getKey());
 216.                                env.protect();
 217.    
 218.                                entry.getValue().get(OP_ADDR).set(env);
 219.                                list.add(entry.getValue());
 220.                            }
 221.    
 222.                            for (Map.Entry<String, ModelNode> entry : connectionDefinitionsOperations.en...
 223.                                final ModelNode env = raAddress.clone();
 224.                                env.add(CONNECTIONDEFINITIONS_NAME, entry.getKey());
 225.                                env.protect();
 226.    
 227.                                entry.getValue().get(OP_ADDR).set(env);
 228.                                list.add(entry.getValue());
 229.    
 230.                                final HashMap<String, ModelNode> properties = cfConfigPropertiesOperatio...
 231.                                if (properties != null) {
 232.                                    for (Map.Entry<String, ModelNode> configEntry : properties.entrySet(...
 233.                                        final ModelNode configEnv = env.clone();
 234.                                        configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())...
 235.                                        configEnv.protect();
 236.    
 237.                                        configEntry.getValue().get(OP_ADDR).set(configEnv);
 238.                                        list.add(configEntry.getValue());
 239.                                    }
 240.                                }
 241.                            }
 242.    
 243.                            for (Map.Entry<String, ModelNode> entry : adminObjectsOperations.entrySet())...
 244.                                final ModelNode env = raAddress.clone();
 245.                                env.add(ADMIN_OBJECTS_NAME, entry.getKey());
 246.                                env.protect();
 247.    
 248.                                entry.getValue().get(OP_ADDR).set(env);
 249.                                list.add(entry.getValue());
 250.    
 251.                                final HashMap<String, ModelNode> aoProperties = aoConfigPropertiesOperat...
 252.                                if (aoProperties != null) {
 253.                                    for (Map.Entry<String, ModelNode> configEntry : aoProperties.entrySe...
 254.                                        final ModelNode configEnv = env.clone();
 255.                                        configEnv.add(CONFIG_PROPERTIES.getName(), configEntry.getKey())...
 256.                                        configEnv.protect();
 257.    
 258.                                        configEntry.getValue().get(OP_ADDR).set(configEnv);
 259.                                        list.add(configEntry.getValue());
 260.                                    }
 261.                                }
 262.                            }
 263.    
 264.    
 265.                            return;
 266.    
 267.                        } else {
 268.                            if (AS7ResourceAdapterTags.forName(reader.getLocalName()) == AS7ResourceAdap...
 269.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 270.                            }
 271.                        }
 272.                        break;
 273.                    }
 274.                    case START_ELEMENT: {
 275.                        switch (AS7ResourceAdapterTags.forName(reader.getLocalName())) {
 276.                            case ADMIN_OBJECTS:
 277.                            case CONNECTION_DEFINITIONS:
 278.                            case BEAN_VALIDATION_GROUPS: {
 279.                                //ignore it,we will parse bean-validation-group,admin_object and connect...
 280.                                break;
 281.                            }
 282.                            case ADMIN_OBJECT: {
 283.                                parseAdminObjects(reader, adminObjectsOperations, aoConfigPropertiesOper...
 284.                                break;
 285.                            }
 286.    
 287.                            case CONNECTION_DEFINITION: {
 288.                                switch (org.jboss.as.connector.subsystems.resourceadapters.Namespace.for...
 289.                                    case RESOURCEADAPTERS_1_0:
 290.                                    case RESOURCEADAPTERS_1_1:
 291.                                    case RESOURCEADAPTERS_2_0:
 292.                                        parseConnectionDefinitions_1_0(reader, connectionDefinitionsOper...
 293.                                        break;
 294.                                    case RESOURCEADAPTERS_3_0:
 295.                                        parseConnectionDefinitions_3_0(reader, connectionDefinitionsOper...
 296.                                        break;
 297.                                }
 298.                                break;
 299.                            }
 300.                            case BEAN_VALIDATION_GROUP: {
 301.                                String value = rawElementText(reader);
 302.                                operation.get(BEANVALIDATION_GROUPS.getName()).add(BEANVALIDATIONGROUP.p...
 303.                                break;
 304.                            }
 305.                            case BOOTSTRAP_CONTEXT: {
 306.                                String value = rawElementText(reader);
 307.                                BOOTSTRAP_CONTEXT.parseAndSetParameter(value, operation, reader);
 308.                                break;
 309.                            }
 310.                            case CONFIG_PROPERTY: {
 311.                                parseConfigProperties(reader, configPropertiesOperations);
 312.                                break;
 313.    
 314.                            }
 315.                            case TRANSACTION_SUPPORT: {
 316.                                if (txSupportMatched) {
 317.                                    throw new ParserException(bundle.unexpectedElement(TRANSACTION_SUPPO...
 318.                                }
 319.                                String value = rawElementText(reader);
 320.                                TRANSACTION_SUPPORT.parseAndSetParameter(value, operation, reader);
 321.                                isXa = value != null && TransactionSupportEnum.valueOf(value) == Transac...
 322.                                txSupportMatched = true;
 323.                                break;
 324.                            }
 325.                            case WORKMANAGER: {
 326.                                parseWorkManager(operation, reader);
 327.                                break;
 328.                            }
 329.                            case ARCHIVE: {
 330.                                if (archiveOrModuleMatched) {
 331.                                    throw new ParserException(bundle.unexpectedElement(ARCHIVE.getXmlNam...
 332.                                }
 333.                                archiveOrModuleName = rawElementText(reader);
 334.                                ARCHIVE.parseAndSetParameter(archiveOrModuleName, operation, reader);
 335.                                archiveOrModuleMatched = true;
 336.                                break;
 337.                            }
 338.                            case MODULE: {
 339.                                if (archiveOrModuleMatched) {
 340.                                    throw new ParserException(bundle.unexpectedElement(MODULE.getXmlName...
 341.                                }
 342.    
 343.                                String moduleId = rawAttributeText(reader, "id");
 344.                                String moduleSlot = rawAttributeText(reader, "slot", "main");
 345.                                archiveOrModuleName = moduleId + ":" + moduleSlot;
 346.                                MODULE.parseAndSetParameter(archiveOrModuleName, operation, reader);
 347.    
 348.                                archiveOrModuleMatched = true;
 349.                                break;
 350.                            }
 351.                            default:
 352.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 353.                        }
 354.                        break;
 355.                    }
 356.                }
 357.            }
 358.    
 359.            throw new ParserException(bundle.unexpectedEndOfDocument());
 360.        }
 361.    
 362.        protected WorkManager parseWorkManager(final ModelNode operation, final XMLStreamReader reader) ...
 363.                ValidateException {
 364.            WorkManagerSecurity security = null;
 365.    
 366.            while (reader.hasNext()) {
 367.                switch (reader.nextTag()) {
 368.                    case END_ELEMENT: {
 369.                        if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.WORKMANAGER)...
 370.                            return new WorkManagerImpl(security);
 371.                        } else {
 372.                            if (Activation.Tag.forName(reader.getLocalName()) == Activation.Tag.UNKNOWN)...
 373.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 374.                            }
 375.                        }
 376.                        break;
 377.                    }
 378.                    case START_ELEMENT: {
 379.                        switch (WorkManager.Tag.forName(reader.getLocalName())) {
 380.                            case SECURITY: {
 381.                                WM_SECURITY.parseAndSetParameter("true", operation, reader);
 382.                                security = parseWorkManagerSecurity(operation, reader);
 383.                                break;
 384.                            }
 385.                            default:
 386.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 387.                        }
 388.                        break;
 389.                    }
 390.                }
 391.            }
 392.            throw new ParserException(bundle.unexpectedEndOfDocument());
 393.        }
 394.    
 395.        protected WorkManagerSecurity parseWorkManagerSecurity(final ModelNode operation, final XMLStrea...
 396.                ParserException, ValidateException {
 397.            boolean mappingRequired = false;
 398.            String domain = null;
 399.            String defaultPrincipal = null;
 400.            List<String> defaultGroups = null;
 401.            Map<String, String> userMappings = null;
 402.            Map<String, String> groupMappings = null;
 403.    
 404.            boolean userMappingEnabled = false;
 405.    
 406.            while (reader.hasNext()) {
 407.                switch (reader.nextTag()) {
 408.                    case END_ELEMENT: {
 409.                        if (WorkManager.Tag.forName(reader.getLocalName()) == WorkManager.Tag.SECURITY) ...
 410.                            return new WorkManagerSecurityImpl(mappingRequired, domain,
 411.                                    defaultPrincipal, defaultGroups,
 412.                                    userMappings, groupMappings);
 413.                        } else {
 414.                            if (WorkManagerSecurity.Tag.forName(reader.getLocalName()) == WorkManagerSec...
 415.                                throw new ParserException(bundle.unexpectedEndTag(reader.getLocalName())...
 416.                            }
 417.                        }
 418.                        break;
 419.                    }
 420.                    case START_ELEMENT: {
 421.                        switch (WorkManagerSecurity.Tag.forName(reader.getLocalName())) {
 422.                            case DEFAULT_GROUPS:
 423.                            case MAPPINGS: {
 424.                                // Skip
 425.                                break;
 426.                            }
 427.                            case MAPPING_REQUIRED: {
 428.                                String value = rawElementText(reader);
 429.                                WM_SECURITY_MAPPING_REQUIRED.parseAndSetParameter(value, operation, read...
 430.                                break;
 431.                            }
 432.                            case DOMAIN: {
 433.                                String value = rawElementText(reader);
 434.                                WM_SECURITY_DOMAIN.parseAndSetParameter(value, operation, reader);
 435.                                break;
 436.                            }
 437.                            case DEFAULT_PRINCIPAL: {
 438.                                String value = rawElementText(reader);
 439.                                WM_SECURITY_DEFAULT_PRINCIPAL.parseAndSetParameter(value, operation, rea...
 440.                                break;
 441.                            }
 442.                            case GROUP: {
 443.                                String value = rawElementText(reader);
 444.                                operation.get(WM_SECURITY_DEFAULT_GROUPS.getName()).add(WM_SECURITY_DEFA...
 445.                                break;
 446.                            }
 447.                            case USERS: {
 448.                                userMappingEnabled = true;
 449.                                break;
 450.                            }
 451.                            case GROUPS: {
 452.                                userMappingEnabled = false;
 453.                                break;
 454.                            }
 455.                            case MAP: {
 456.                                if (userMappingEnabled) {
 457.                                    String from = rawAttributeText(reader, WorkManagerSecurity.Attribute...
 458.                                    if (from == null || from.trim().equals(""))
 459.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 460.                                    String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T...
 461.                                    if (to == null || to.trim().equals(""))
 462.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 463.                                    ModelNode object = new ModelNode();
 464.                                    WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);...
 465.                                    WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
 466.                                    operation.get(WM_SECURITY_MAPPING_USERS.getName()).add(object);
 467.                                } else {
 468.                                    String from = rawAttributeText(reader, WorkManagerSecurity.Attribute...
 469.                                    if (from == null || from.trim().equals(""))
 470.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 471.                                    String to = rawAttributeText(reader, WorkManagerSecurity.Attribute.T...
 472.                                    if (to == null || to.trim().equals(""))
 473.                                        throw new ParserException(bundle.requiredAttributeMissing(WorkMa...
 474.                                    ModelNode object = new ModelNode();
 475.                                    WM_SECURITY_MAPPING_FROM.parseAndSetParameter(from, object, reader);...
 476.                                    WM_SECURITY_MAPPING_TO.parseAndSetParameter(to, object, reader);
 477.                                    operation.get(WM_SECURITY_MAPPING_GROUPS.getName()).add(object);
 478.                                }
 479.                                break;
 480.                            }
 481.                            default:
 482.                                throw new ParserException(bundle.unexpectedElement(reader.getLocalName()...
 483.                        }
 484.                        break;
 485.                    }
 486.                }
 487.            }
 488.            throw new ParserException(bundle.unexpectedEndOfDocument());
 489.        }
 490.    
 491.    
 492.        /**
 493.         * A Tag.
 494.         *
 495.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 496.         */
 497.        public enum Tag {
 498.            /**
 499.             * always first
 500.             */
 501.            UNKNOWN(null),
 502.    
 503.            /**
 504.             * jboss-ra tag name
 505.             */
 506.            RESOURCE_ADAPTERS("resource-adapters");
 507.    
 508.            private final String name;
 509.    
 510.            /**
 511.             * Create a new Tag.
 512.             *
 513.             * @param name a name
 514.             */
 515.            Tag(final String name) {
 516.                this.name = name;
 517.            }
 518.    
 519.            /**
 520.             * Get the local name of this element.
 521.             *
 522.             * @return the local name
 523.             */
 524.            public String getLocalName() {
 525.                return name;
 526.            }
 527.    
 528.            private static final Map<String, Tag> MAP;
 529.    
 530.            static {
 531.                final Map<String, Tag> map = new HashMap<String, Tag>();
 532.                for (Tag element : values()) {
 533.                    final String name = element.getLocalName();
 534.                    if (name != null)
 535.                        map.put(name, element);
 536.                }
 537.                MAP = map;
 538.            }
 539.    
 540.            /**
 541.             * Static method to get enum instance given localName string
 542.             *
 543.             * @param localName a string used as localname (typically tag name as defined in xsd)
 544.             * @return the enum instance
 545.             */
 546.            public static Tag forName(String localName) {
 547.                final Tag element = MAP.get(localName);
 548.                return element == null ? UNKNOWN : element;
 549.            }
 550.    
 551.        }
 552.    
 553.        /**
 554.         * An Attribute.
 555.         *
 556.         * @author <a href="stefano.maestri@jboss.com">Stefano Maestri</a>
 557.         */
 558.        public enum Attribute {
 559.    
 560.            /**
 561.             * always first
 562.             */
 563.            UNKNOWN(null),
 564.            /**
 565.             * id attribute
 566.             */
 567.            ID("id"),
 568.            /**
 569.             * statistics-enabled attribute
 570.             */
 571.            STATISTICS_ENABLED("statistics-enabled"),;
 572.    
 573.            private String name;
 574.    
 575.            /**
 576.             * Create a new Tag.
 577.             *
 578.             * @param name a name
 579.             */
 580.            Attribute(final String name) {
 581.                this.name = name;
 582.            }
 583.    
 584.            /**
 585.             * Get the local name of this element.
 586.             *
 587.             * @return the local name
 588.             */
 589.            public String getLocalName() {
 590.                return name;
 591.            }
 592.    
 593.            /**
 594.             * {@inheritDoc}
 595.             */
 596.            public String toString() {
 597.                return name;
 598.            }
 599.    
 600.            private static final Map<String, Attribute> MAP;
 601.    
 602.            static {
 603.                final Map<String, Attribute> map = new HashMap<String, Attribute>();
 604.                for (Attribute element : values()) {
 605.                    final String name = element.getLocalName();
 606.                    if (name != null)
 607.                        map.put(name, element);
 608.                }
 609.                MAP = map;
 610.            }
 611.    
 612.            /**
 613.             * Set the value
 614.             *
 615.             * @param v The name
 616.             * @return The value
 617.             */
 618.            Attribute value(String v) {
 619.                name = v;
 620.                return this;
 621.            }
 622.    
 623.            /**
 624.             * Static method to get enum instance given localName XsdString
 625.             *
 626.             * @param localName a XsdString used as localname (typically tag name as defined in xsd)
 627.             * @return the enum instance
 628.             */
 629.            public static Attribute forName(String localName) {
 630.                final Attribute element = MAP.get(localName);
 631.                return element == null ? UNKNOWN.value(localName) : element;
 632.            }
 633.    
 634.        }
 635.    
 636.    }